位运算

最近写了几道位运算的题目,顺便复习一下位运算的基本知识。

反码:将二进制的所有值取反,0变成1,1变成0
补码:反码加一

二进制转换
正常情况下,我们可以用Integer.toBinaryString()来获取一个负数的二进制字符串,但是将二进制字符串转换为Integer时Integer.valueOf("1010", 2)就只能转正整数,负数是无法转换的。要想转换二进制为负数,得用new BigInteger("二进制字符串", 2).intValue();
我们都知道一个int有8个字节,32位,但是最左边的那个位置是用来表示正负符号的,也就是说Integer.MAX_VALUE所代表的值二进制是:0111 1111 1111 1111 1111 1111 1111 1111而1111 1111 1111 1111 1111 1111 1111 1111代表的是-1。

位运算
我们都知道移位运算符有三个:>> / << / >>> ;其中>>>叫做无符号右移,有什么区别?
Integer.toBinaryString(Integer.MAX_VALUE << 1);--> -2
正常情况下:左移右移的规则是左边多的去掉,右边多的也是去掉,右边少的补0,负数左边少了是补1,正数左边少了是补0。所以有个无符号右移,为的就是这个。>>>无符号右移左边缺了是不管正负数直接补0。

n &= n-1 会把n的二进制最后一个1换成0,所以广泛用于计算二进制串有多少个1的算法

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容