欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 综合教程 >内容正文

综合教程

java位运算符,&,|,>>>,>>,<<,<<<的区别

发布时间:2024/1/4 综合教程 61 生活家
生活随笔 收集整理的这篇文章主要介绍了 java位运算符,&,|,>>>,>>,<<,<<<的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

说明

最近读到javaReentrantReadWriteLock 用到了位运算符 所以先看位运算符 再去学习源码

二进制在线计算器

http://www.99cankao.com/digital-computation/binary-decimal-converter.php

补码,反码,原码

https://www.cnblogs.com/shamo89/p/9846385.html

转为二进制进行运算同为1时为1

如:3&5,3的二进制:11,5的二进制为101 运算后为001

计算

011

101

---

001

|

转为二进制进行运算,同为0时为0,否则为1

如:3&5,3的二进制:11,5的二进制为101 运算后为111

011

101

---

111

<<

注:因为java int是32位所以补了一堆0

表示左移移,不分正负数,低位补0;

正数:4<<1

    转换为二进制00000000 00000000 00000000 00000100<<1   

二进制向左移动1位低位补0得出00000000 00000000 00000000 00001000

转为10进制=8

负数-4<<1

负数的二进制表示为绝对值的二进制最高位补1,10000000 00000000 00000000 00000100

反码(最高位符号位不变)1111111111111111 11111111 111011

补码(最低位进1)1111111111111111 11111111 1111100

补码左移(最低位补0) 1111111111111111 11111111 111000

反码(最高位符号位不变)1111111111111111 11111111 110111

原码(最高位符号位不变),10000000 00000000 00000000 00001000 最高位是符号位 所以我们直接拿1000转二进制等于8 最高位1 表示负数 所以得出-8

<<<

java没得这个编译出错

>>

表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

正数:r = 4 >> 1

转换为二进制00000000 00000000 00000000 00000100

右移1位 00000000 00000000 00000000 00000010

转为10进制 2

负数r = -4 >> 1

转换为二进制10000000 00000000 00000000 00000100

反码 11111111111111111111111111111011

补码11111111111111111111111111111100

补码右移1位 11111111111111111111111111111110

(根据补码反推反码)11111111111111111111111111111101

(根据反码反推原码)原码10000 00000 10000 00000010

10转二进制 2 符号位1表示负数 最终得出-2

>>>

表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

正数: r = 4 >>> 1

    的结果与 r = 4>> 1 相同;

负数:r = -4 >>> 1

转换为二进制10000000 00000000 00000000 00000100

反码 11111111111111111111111111111011

补码11111111111111111111111111111100

补码右移1位(高位补0) 01111111111111111111111111111110

补码转10进制等于2147483646

总结

以上是生活随笔为你收集整理的java位运算符,&amp;,|,&gt;&gt;&gt;,&gt;&gt;,&lt;&lt;,&lt;&lt;&lt;的区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。