此文太低端,大佬绕道。
<< >> | & ^ ~
有可能你看到过这些个符号,没错,这些是关于字节的位运算符号,
>> 看箭头就知道了,这个是按位右移运算符
举个栗子
4 >> 1
4的二进制表示为 0100 >> 1 = 0010
0010 大家都知道的
so 4 >> 1 =2
<< 不多说,左移
举个栗子 ,还是说说 4
4 << 1
运算应该是这样的 0100 << 1 = 1000
so 4 << 1 =8
“|” 或运算
按位或运算,这个怎么理解呢,逻辑运算中“或”总结下就是8个字“一真则真,同假才假”(略low… -_-!)
位运算中也是这个规则,当运算中对应的位都是 0(零)的时候,运算结果为0,有一个是1 运算结果就是1,按照这个规则来计算下:
4 | 1 =??? 先自己算下
…
…
…
揭晓答案
0100
0001
———
0101
4 | 1 = 5
什么鬼不就是 4+1=5 ??
不妨验证下
4 | 3 = ??
0100 | 0011 = 0111 (7)
4 | 4 = ??
0100 | 0100 = 0100 (4)
哦 NO 加法不是这样的,我错了 →_→
实际上这算是加法运算的一部分,少的只是进位(二进制进位)
0100
0100 +
———
1000
进位以后你就发现 4+4=8 了
& 与运算
逻辑与运算总结下就是 “同真为真,一假具假”,在位运算中,运算的对应位上都是1 计算的结果是1 ,对应位有个一是0 运算的结果就是0,举例如下
不啰嗦
4 & 1
0100 & 0001 = 0000 (0)
5 & 6
0101 & 0110 = 0100 (4)
实际应该是否有见过这样的操作 int 转 byte 我们通常会这样写(至少我是这样写的)
(byte)(int&0xff)
有这样一个需求,要判断某个字节位是否为1,比如说 第3位是否是1要怎么判断呢?
构思下,大家可以自行发挥,就不班门弄斧了…
^ 异或运算
逻辑异或运算,不知道是干什么用的 -_-!!通常在一些加密算法中会看到。总结为“逻辑相异则为真,逻辑相同是为假”。
废话少来… ←_←
举个栗子
4 & 5
0100
0101 &
————
0001 (1)
~ 取反
不难理解 举个栗子
~4
~0100=1011 (11)
表示不放心,这么简单???
果断试一下为了方便起见,直接用 js 试了下
%KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲@!&!..(此段无法识别,自动屏蔽)
表示不淡定了看图:
这里先不说。。
行文至此,深感文思阻塞,写罢收工!
请不要吐槽排版。。。