前提

所有的10进制整数在计算机里面都是用32位的二进制表示。
一个字节32位。第一位代表符号位,所以整数最大可表示(2^31)-1

负数用32位怎么表示

去除符号位 后面取反+1
例如:11111111 11111111 11111111 11111011
第一位代表符号,后面则变为 1000000 00000000 00000000 00000101 代表4,
加上符号位,则该数代表-5

位运算

& 与运算: 两个为1才是1

代码示例

image.png

| 或运算: 任何有一个1就是1

代码示例

image.png

异或 非运算: 有且只有一个1才是1

代码示例

image.png

左移 <<

用32位表示的十进制数往左边移动一位,后面的补0,每移动一位,移动后的数=原数*2

右移 >> >>>

带符号右移 >>

正数右移高位补0,负数右移高位补1

无符号右移 >>>

无论正数还是负数,高位通通补0.

代码示例

image.pngimage.png

相反数获取

无论正负数取反加1
例如
00000000 00000000 00000000 00001011 该32位代表11
取反加1变成
11111111 11111111 11111111 11110101
获取该负数变为
10000000 00000000 00000000 00001011 代表-11

代码示例

image.png

代码:

algorithm模块 FirstDay.Class