点击上方 "程序员小乐"关注, 星标或置顶一起成长
第一时间与你相约
每日英文
If you run, you stand a chance losing ,but if you don’t run , you’ve already lost.
如果你在努力奋斗,你有可能会失败,但是,如果你不奋斗你就已经输了。
每日掏心话
当我们忙碌着不断前进时候,从未有空停住脚步驻足欣赏,所有的事情如同奔跑的汽车,在玻璃前留下的一瞬间的景色。
来自:CoderJed | 责编:乐乐
链接:jianshu.com/p/da243462beb5
![f13ddcd5b6d0daffcc9b0bbb406b4a5d.png](https://i-blog.csdnimg.cn/blog_migrate/12e6b45f314aed7fb037df2bb5106527.jpeg)
程序员小乐(ID:study_tech)第 727 次推文 图源:Unsplash
往日回顾:春运买不到票?推荐一款全 GitHub 最牛逼的抢票神器,3秒钟抢到!支持候补抢票!标星2.2W+
正文
1. 原码、反码、补码的转换
(1) 正数的原码、反码、补码相同
![d425022ee4b126b7fd3a295a8216caba.png](https://i-blog.csdnimg.cn/blog_migrate/425f0c93d72110fd6709602e2f3aaa8c.jpeg)
(2) 负数的原码、反码、补码转换如下图所示
![587c4218fce307a05358d6f8dd2a1917.png](https://i-blog.csdnimg.cn/blog_migrate/26eaed5297f73191b002e307ec583e7a.jpeg)
需要说明的是,在计算机中,数字是以补码的形式存在的,计算也是用补码来进行计算,计算后的结果也是补码
2. 位运算
(1) & : 按位与
5 & 9 = 1
![66e22a389a1bd429b930736fda4da37d.png](https://i-blog.csdnimg.cn/blog_migrate/903ee5586040fee635cec3f4fae1f21e.jpeg)
(2) | : 按位或
5 | 9 = 13
![e06ca40f45819273bc01ff335ae085c0.png](https://i-blog.csdnimg.cn/blog_migrate/20b26986e9420f0efe473e5a5cc15968.jpeg)
(3) ^ : 按位异或
5 ^ 9 = 12
![d66217778ece6582d5e184bd7a66ba9c.png](https://i-blog.csdnimg.cn/blog_migrate/5b8319d547ca4c214225929bda738c79.jpeg)
(4) ~ : 按位非
~5 = -6
![f5ad1e051aee679726bed807c731872e.png](https://i-blog.csdnimg.cn/blog_migrate/089ad15f290247db50c0456b70889290.jpeg)
(5) << : 左移
5 << 2 = 20
![f69bf2455f5b17bcf90a39a62367a4a1.png](https://i-blog.csdnimg.cn/blog_migrate/bcb62c1d3039fa620d5c9dfddd56e5d2.jpeg)
-5 << 2 = -20
![589bc73deab6c526afb96ef82f84da1e.png](https://i-blog.csdnimg.cn/blog_migrate/cd0263b8e26b93e77d75fa48c46d02d4.jpeg)
(6) >> : 右移
-5 >> 2 = -2
![f1e163fd26905f681646b592f528b0f2.png](https://i-blog.csdnimg.cn/blog_migrate/42142a29f474425a4a1d1642cfc87b46.jpeg)
(7) >>> : 无符号右移
-5 >>> 2 = 1073741822
![7e78870e5e2042cef3b6a61541c5a6b6.png](https://i-blog.csdnimg.cn/blog_migrate/f6271c5d1300b19a10597dee1771b889.jpeg)
3. 注意
对于低于 int 类型(如byte、short和char)的操作数总是先自动转换为int类型后再移位
对于 int 类型的整数移位 a >> b, 当 b>32 时,系统先用 b 对 32 求余(因为 int 是 32 位),得到的结果才是真正移位的位数,例如,a >> 33 和 a >> 1 的结果相同,而 a >> 32 = a
对于 long 类型的整数移位 a >> b, 当 b>64 时,系统先用 b 对 64 求余(因为 long 是 64 位),得到的结果才是真正移位的位数
当进行移位运算时,只要被移位的二进制码没有发生有效位的数字丢失(对于正数而言,通常指被移出去的位全部是 0),不难发现左移 n 位就相当于乘以 2 的 n 次方,右移 n 位则是除以 2 的 n 次方
进行移位运算不会改变操作数本身,只是得到了一个新的运算结果
欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。
猜你还想看
阿里、腾讯、百度、华为、京东最新面试题汇集
图解排序算法:彻底搞懂归并排序
Java 配合 mitmproxy HTTPS 抓包调试
Java爬取并下载酷狗TOP500歌曲
关注「程序员小乐」,收看更多精彩内容
嘿,你在看吗?