2025-11-08 05:39:09
左移程序主要是用来快速实现乘法运算的,比如把数字10左移一位就等于20。不过不能随便用左移,特别是处理有符号数的时候,左移可能会让数值变负或者溢出。比如32位整数0x80000000左移一位就会变成0xFFFFFFFF,本来是-,结果变成了-的负数,这叫符号位干扰。
为啥要这样讲呢?因为左移本质是把二进制位整体往左推,右边补0。比如8位数0b00000001左移3位就变成0b10000000,这等于128而不是1乘以8。数据手册说32位整数左移31位会导致符号位被覆盖,这时候数值绝对值会超过最大值,就会变成负数。而无符号数虽然不会变负,但超过最大值也会溢出,比如8位数最大是255,左移3位就变成192,丢失了低三位信息。所以得看具体场景,不能一概而论用左移。
本题链接: