礼品代发网

礼品代发网

收录130107113题,礼品代发网免费搜题解答

今日已更新0道题

单片机为什么左移补0-单片机中左移符号的意义

2025-11-08 05:45:59  

单片机为什么左移补0-单片机中左移符号的意义

优质解答

单片机里左移操作就像把数字的各位往左推,空出来的右边位置自然得填0。比如8位二进制数10000000左移一位,就变成00000000,高位被挤出去,低位补0。这跟算盘拨珠子一样,珠子往左拨,空位就补 nothing。但如果是带符号的数,左移时符号位也跟着走,比如补码11110000左移变成11100000,结果反而变小了,这就得注意了。

为啥必须补0呢?因为移位操作本质是乘2或除2的快捷方式。比如二进制数1010(十进制10)左移一位变成10100(20),相当于10×2。这时候右边空了四位,必须补0才能保持数值正确。但如果是负数用补码表示,左移会自动丢失符号位,比如-8的补码是1000,左移后变成000,变成+0,这就出错了。所以单片机设计移位指令时,逻辑左移直接补0,算术左移会保持符号位,比如8位寄存器SNGL左移时,符号位会被复制到高位,这样-8的补码1000左移后变成10000(但8位只能存前8位,变成00000000,实际变成+0)。举个例子,用16位数-32(补码是1111)左移一位,算术移位变成1111(-16),逻辑移位变成0000(+0)。这说明补0只适用于正数或非负数,带符号数必须用算术移位。模拟效果:比如句子合并成“左移补0跟乘2有关”,少字变成“左移补0跟乘2相关”,标点变成逗号,移位后输出“左移补0跟乘2相关”。

本题链接:

左移补0符号位