首先想要知道>>运算和<<运算得先知道原码、反码、补码。
先将一个10进制整数转化为32位二进制数。
正整数的原码、反码和补码是一样的。
——————————————————————————————————————————————————
负整数的反码:符号位不变,其它按位取反。
负整数的补码:原码符号位不变,数值位按位取反,末位再加1(即反码加1)。
例如:求-2的原码、补码、反码
原码:1000 0000 0000 0000 0000 0000 0000 0010 反码:1111 1111 1111 1111 1111 1111 1111 1101 补码:1111 1111 1111 1111 1111 1111 1111 1110正数:以2<<2为例,它的原码即补码,则
0000 0000 0000 0000 0000 0000 0000 0010 原码(补码) 0000 0000 0000 0000 0000 0000 0000 1000 左移2位(为8)2<<2移动后的补码即为答案,所以答案为8。
负数:以-2<<2为例,先求出它的补码,再将补码左移2位,再将移动后的补码-1求出反码,再按符号位不变,按位取反求出原码。
1111 1111 1111 1111 1111 1111 1111 1110 补码 1111 1111 1111 1111 1111 1111 1111 1000 左移2位 - 1 补码-1 1111 1111 1111 1111 1111 1111 1111 0111 反码 1000 0000 0000 0000 0000 0000 0000 1000 原码(-8)则-2<<2的答案为-8。
正数:求16>>2的结果,先将16的二进制补码右移两位,高位补0,那么得到:
0000 0000 0000 0000 0000 0000 0001 0000 原码(即补码) 0000 0000 0000 0000 0000 0000 0000 0100 右移2位得到补码即为原码,转换为十进制,那么16>>2的结果为4。负数:求-16>>2的结果,先求-16的补码,再右移2位,高位补1,再求反码,再求原码,那么得到:
1000 0000 0000 0000 0000 0000 0001 0000 原码 1111 1111 1111 1111 1111 1111 1110 1111 反码 + 1 1111 1111 1111 1111 1111 1111 1111 0000 补码 1111 1111 1111 1111 1111 1111 1111 1100 右移两位后的补码(高位补1) - 1 1111 1111 1111 1111 1111 1111 1111 1011 右移两位后的反码 1000 0000 0000 0000 0000 0000 0000 0100 右移两位后的原码将得到的原码转换为十进制,那么-16>>2的结果为-4。
套用规律即可,两条公式搞定。
