正数取反
~8(对8进行取反操作):先将8转为2进制
原码:00001000
反码:00001000
补码:00001000
对补码进行取反操作:
11110111
转为原码,符号位不变补码先减1再取反:
11110110
10001001 -> 十进制的-9
负数取反
~ -2
8 ----> 1000
7 ----> 0111
8 & 7 ----> 0000 ,结果为0
8 ----> 1000
7 ----> 0111
8 | 7 ----> 1111 ,结果为15
8 ----> 1000
7 ----> 0111
8 | 7 ----> 1111 ,结果为15
8 << 2 相等于乘以2的二次方,结果为32
8 >> 2 相等于除以2的二次方,结果为2
1000 -> 0010
负数右移,高位补一
-2 >> 1 = -1
1010 ->
1101(反码) ->
1110(补码) ->
1110 >>1 = 1111(补码右移1位)
1111反码为1110
1110 的原码为 1001
1001 表示-1
10 进制转2进制的时候,因为2进制数一般分8位、 16位、32位以及64位 表示一个10进制数,所以在转换过程中,最高位会补零。
在计算机中负数采用2进制的补码表示,10进制转为2进制得到的是原码,将原码按位取反得到的是反码,反码加1得到补码。
2进制的最高位是符号位,0表示正,1表示负。
>>> 与 >> 唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
比如,byte是8位的,-1表示为byte型是11111111(补码表示法)
b>>>4就是无符号右移4位,即00001111,这样结果就是15。
原文:https://www.cnblogs.com/Latiny/p/11304830.html