对于int整数,其在计算机中的存储位数为32位,今天做到移位的题目,发现自己对移位有着很错误的认知,下面列出例子希望能校正自己的认识。
对于正数,设x=0x7000001
原数:01110000 00000000 00000000 00000001
向右移一位
移后:00111000 00000000 00000000 00000000
向左移两位
移后:11100000 00000000 00000000 00000010
可以得到结论:正数向右移位时,空出的位置由0代替填充,挤出去的数不管;正数向左移位时,可能出现正负变换(具体根据移后最高位判断),同时空出的位置由0代替填充。
对于负数,设x=0xf1000000
原数:11110001 00000000 00000000 00000000
向左移四位
移后:00010000 00000000 00000000 00000000
向右移两位
移后:11111100 01000000 00000000 00000000
可以得到结论:负数向右移位时,空出的位置由1替代,符号不变,挤出去的数不管;负数向左移位时,可能出现正负变换(具体根据移后最高位判断),同时空出的位置由0代替填充。