二进制
如果你是搞网络的,我觉得你一定要记住以下几种二进制数的转换值。
你是一个网络工程 师,当看到一串二进制数时,你不要告诉我你会拿出笔纸或掰手指算半天才知道它转化成十进制的数值。
要想快,那就记下下面几种常见的二进制--十进制转换:
以8位 来演示:
1.第一种:
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
0010 0000 32
0100 0000 64
1000 0000 128
2.第二种:
0000 0001 1
0000 0011 3
0000 0111 7
0000 1111 15
0001 1111 31
0011 1111 63
0111 1111 127
3.第三种:
1000 0000 128
1100 0000 192
1110 0000 224
1111 0000 240
1111 1000 248
1111 1100 252
1111 1110 254
举个例子: 1110 1011
可分为:
1110 0000(上面第三种类型) 224
0000 1000(上面第一种类型) 8
0000 0011(上面第二种类型) 3
我们通过记住上面三种类型的转换,再用加 法(加法口算你会吧)立即得到结果:235
==================================================================================
方法二:
熟记以下排列,其实很Easy了,从右往 左,依次是前一个数的2倍:
256 128 64 32 16 8 4 2 1
随便写个数字比如48
48 = 32 + 16,所以在32 和 16所在的位置为1,其余为0,
转为2进制就是
256 128 64 32 16 8 4 2 1
0 0 0 1 1 0 0 0 0
98 = 64 + 32 + 2
转为2进制就是
256 128 64 32 16 8 4 2 1
0 0 1 1 0 0 0 1 0
510 = 256 + 128 + 64 + 32 +16 + 8 + 4 + 2
转为2进制就是
256 128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1 0
二进制转十进制就更简单了,
比如随便写的一串 01111101
先写上 : 0 1 1 1 1 1 0 1
然后填充 128 64 32 16 8 4 2 1
十进制为 64+32+16+8+4+1=125
位运算
&
3 & 5 = 1
将3 5转为二进制进行计算
3 ⇒ 0000 0011
------------------------------>0000 0001
5 ⇒ 0000 0101
相同的二进制位同时位1,才等于1
|
3 | 5 = 7
将3 5转为二进制进行计算
3 ⇒ 0000 0011
------------------------------>0000 0111 == 4 + 2 + 1
5 ⇒ 0000 0101
相同的二进制位有一个为1则为1
^
3 ^ 5 = 6
将3 5转为二进制进行计算
3 ⇒ 0000 0011
------------------------------>0000 0110 == 4 + 2
5 ⇒ 0000 0101
相同的二进制位相同为0,不相同为1
~
~3 = -4
按位取反
~x = -(x + 1)
<<
左移
5 << 2 = 20
-5 << 2 = -20 负数的二进制表示
转为二进制左移2位
>>
右移
5 >> 2 = 1
-5>> 2 = -2 负数的二进制表示
转为二进制右移2位
5⇒ 0000 0101⇒ 右移两位⇒ 0000 0001
-5==> 原码 -> 反码 -> 补码得到⇒ 11111011 ⇒右移 10000010⇒ -2
>>>
忽略符号右移,右移后均为正数