java位运算

此文太低端,大佬绕道。

<< >> | & ^ ~

有可能你看到过这些个符号,没错,这些是关于字节的位运算符号,

>> 看箭头就知道了,这个是按位右移运算符

举个栗子

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: #̲@!&!..(此段无法识别,自动屏蔽)
表示不淡定了看图:
在这里插入图片描述
这里先不说。。

行文至此,深感文思阻塞,写罢收工!
请不要吐槽排版。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值