Why:一些加密,hash算经常会用到
示例数 |
Integer.toBinaryString(-5) 正值:0000 0000 0000 0000 0000 0000 0000 0101 反码:1111 1111 1111 1111 1111 1111 1111 1010 +1: 1111 1111 1111 1111 1111 1111 1111 1011就为补码 |
正负数 |
正数:0开始,负数1开始 |
正数编码 |
正数和0原码,反码,补码是一样的 |
负数编码 |
原码:正数原码,前面0变1. 反码:最前面1不变,后面的取反。 补码:最前面1不变,后面的取反,末位加1. |
补码 |
原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。 |
java |
java在内存中用补码来表示整数。用IEEE-754来表示float和double。 |
~求反 |
1变0,0变1 |
&求与 |
相乘,两个都为1才为1,其他情况均为0 5表示成:0000 0000 0000 0000 0000 0000 0000 0101 6表示成:0000 0000 0000 0000 0000 0000 0000 0110 进行 & : 0000 0000 0000 0000 0000 0000 0000 0100 得到:4 |
|求或 |
或,都为0才为0其它都为1 5表示成:0000 0000 0000 0000 0000 0000 0000 0101 6表示成:0000 0000 0000 0000 0000 0000 0000 0110 进行 | : 0000 0000 0000 0000 0000 0000 0000 0111 得到:7 |
^不同 |
不同为1,相同为0 5表示成:0000 0000 0000 0000 0000 0000 0000 0101 6表示成:0000 0000 0000 0000 0000 0000 0000 0110 进行 ^ : 0000 0000 0000 0000 0000 0000 0000 0011 得到:3 |
<<乘2 |
左边移动,右面填充0 5表示成: 0000 0000 0000 0000 0000 0000 0000 0101 进行 <<1 操作:0000 0000 0000 0000 0000 0000 0000 1010 |
>>除以2 |
右边移动,左边填充0 5表示成: 0000 0000 0000 0000 0000 0000 0000 0101 进行 >>>1 操作:0000 0000 0000 0000 0000 0000 0000 0010 |