早教吧 育儿知识 作业答案 考试题库 百科 知识分享

算术移位为什么会溢出啊~?算术左移:符号位不变,高位移出,低位补0。为保证补码算术左移时不发生溢出,移位的数据最高有效位必须与符号位相同。在不发生溢出的前提下,用硬件实

题目详情
算术移位 为什么会溢出啊~?
算术左移:符号位不变,高位移出,低位补0。
为保证补码算术左移时不发生溢出,移位的数据最高有效位必须与符号位相同。在不发生溢出的前提下,用硬件实现补码的算术左移时,直接将数据最高有效位移入符号位,不会改变机器数的符号。
移位的数据最高有效位必须与符号位相同?
和后面这句话是什么意思啊~?是说算术左移和逻辑左移的意义一样?~...~but~但是意义何在~?
▼优质解答
答案和解析
取一字节为例,能表示的数字从 -128 ~ 127
先看正数,比如 9,就是 0000 1001,最高位(符号位)和数据最高位都是 0. 左移得到 0001 0010 也就是 18
再看负数 -9,就是 -(0000 1001) 也就是 1111 0110 + 1 即 1111 0111,最高位(符号位)和数据最高位都是 1. 左移后是 1110 1110,反过来是 (1110 1101 + 1)->0001 0010,就是 -18 了。
如果数据最高位和符号位不同的话,说明这个数字的绝对值已经超过 64 了,那么左移一位后必然溢出。
所以一个【有效的】左移最高位和数据最高位必然一致。故算术左移和逻辑左移一样。