位运算基础知识
Posted 三水草肃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算基础知识相关的知识,希望对你有一定的参考价值。
位运算基础知识
-
按位与 &
- 11 得 1,10、01、00 得 0
- 有 0 就得 1
-
按位或 |
- 00 得 0, 10、11、01 和 11 得 1
- 有 1 就得 1
-
异或 ^
- 相同得 0,不同得 1
-
取反 ~
-
左移 <<
-
有符号右移 >>
-
无符号右移 >>>
整数
整数一般用补码来表示
- 有符号整数,即最高位为符号位:
- 0000 1010 正数
- 1000 1010 负数
- 整数类型: byte(8 位)、short(16 位)、init(32 位)、long(64 位)
-
有符号整数
最高位是整数类型 8、16、32、64 位的欧式有符号整数。
-
无符号整数
如果最高位表示的不是整数类型就是无符号整数。 -
原码、反码、补码
- 10 -> 32 位
- 原码是 00000000 00000000 00000000 00001010
- -10 的原码 10000000 00000000 00000000 00001010
- 反码: 符号为不变,其他位取反.
- 10 的反码:01111111 1111111 1111111 11110101
- -10 的反码:11111111 1111111 1111111 11110101
- 正整数的补码 === 原码
- 负整数的补码 === 反码 + 1
- 负整数用补码表示
- 反码 + 1
有符号整数的二进制规律
-
4 位 [-8, 7] === [-2^3, 2^3 - 1]
- 0000 : 0
- 0001 : 1
- 0010 : 2
- 0011 : 3
- .
- .
- .
- 1000 : -8
- 1 是符号位,说明是负数。
- 减 1 取反码得 1111
- 取原码得 1000 得 8,符号位是 1,所以是 -8
- 1001 : -7
- 1111 : -1
-
8 位 [-32, 31] === [-2^7, 2^7 - 1]
-
32 位 [-2^31, 2^31 - 1]
按位取反
~ 9 = -10
- 9 的原码: 1001
- 9 的补码: 01001
- 取反: 10110 ->
- 10110 减 1,取反得原码:11010
- 11010 十进制得 -10
左移 << 有符号右移 >> 无符号右移 >>>
- 左移:和符号没有关系
- 4: 0000 0000 0000 0000 0000 0000 0000 0100
- 4 <<2: 0000 0000 0000 0000 0000 0000 0001 0000 得 16
- -4 取补码 1111 1111 1111 1111 1111 1111 1111 1100
- -4<<2 1111 1111 1111 1111 1111 1111 1111 0000
- 减 1: 1111 1111 1111 1111 1111 1111 1110 1111
- 取反 0000 0000 0000 0000 0000 0000 0001 0000 得 -16
- 有符号右移:高位补 1
- 正数:数的有符号右移和有符号右移是一样的
- 15: 0000 0000 0000 0000 0000 0000 0000 1111
- 15>>2: 0000 0000 0000 0000 0000 0000 0000 0011
- 15>>>2: 0000 0000 0000 0000 0000 0000 0000 0011
- 负数:
- -15: 补码: 1111 1111 1111 1111 1111 1111 1111 0001
- -15>>2: 11 1111 1111 1111 1111 1111 1100 (高位补 1)得: 1111 1111 1111 1111 1111 1111 1111 1100
- 减 1: 1111 1111 1111 1111 1111 1111 1111 1011
- 取反:1000 0000 0000 0000 0000 0000 0000 0100
- 得 -4
- 正数:数的有符号右移和有符号右移是一样的
- 无符号右移:高位补 0
- -15: 补码: 1111 1111 1111 1111 1111 1111 1111 0001
- -15>>>2: 0011 1111 1111 1111 1111 1111 1100 (高位补)得 1111 1111 1111 1111 1111 1111 1111 1100
- 符号位为 0,是正数,当成原码来算
- 1073741820
以上是关于位运算基础知识的主要内容,如果未能解决你的问题,请参考以下文章