1、byte字节和bit比特
1 byte = 8 bit。每个比特的状态总是0或1。
8个bit组成的最小值和最大值如下:
0 0 0 0 0 0 0 0 ---> 1 1 1 1 1 1 1 1(128+64+32+16+8+4+2+1 = 255)
所以1个字节表示范围是[-256...0) ∪ [0..255]。
(为什么负数是到-256,这个我直接死记了,看了网上很多帖子,都是说跟补码啥的有关有点看不懂,还是先记住先吧)
2、int类型
int = 4byte = 32bit
int表示范围是
[-2147483648,0) ∪ [0, 2147483647]。即[-2^31,0)∪ [0,2^31-1]
最小值表示:00000000 00000000 00000000 00000000
最大值表示:011111111 11111111 11111111 11111111(最高位是符号位,0-整数,1-负数)
3、与运算-&
同位都为1才为1,同位都为0为0,同位不相同为0(记了好久老是容易忘/晕)
0 0 1 0 0 1 1 1 1 1 0 0 1 0 1 0 1
0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 1
& | | | |
0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1
经典用法
假设x为int有效范围的数:[-2^32,2^32-1]
1、x & 0 = 0
0 1 1 0 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
2、 判断奇偶数。x & 1 == 0。(1 = 00000001)
为true,说明x的最后一位为0,是偶数。
为false,说明x的最后一位为1,是奇数。
3、取x最后一个1的位置。x & (~x + 1)
假设x = 0 0 0 1 1 0 1 0
则~x = 1 1 1 0 0 1 0 1,
~x+1 = 1 1 1 0 0 1 1 0,
x&(~x+1) = 0 0 0 0 0 0 1 0
4、或运算-|
同位都0才为0,同位都1为1,有一个1为1。