位运算——Java 语言描述
如何打印一个二进制数?
复制代码
int 32 位 0~2^31-1,真正表示的范围实际上是从 0~2^30
原因:int 型既可以表示正数,也可以表示负数
符号位:如果符号位为 0,一定是一个非负数,如果符号为 1,那么代表你绝逼是一个负数
左移:乘 2 的操作
复制代码
负数:在 Java 中的范围是 -2^31
复制代码
那么怎么算的负数呢?
我们先来打印一个-1
复制代码
发现全部都是 1,首先符号位代表你这是一个负数,然后说明,负级把后面的全部状态都进行取反的操作,最后在加 1,10000……1,-000000……1.就是-1
为什么要进行取反+1 的操作,而不是直接存储? 正数,直接就用它裸的这个值进行计算 负数,使符号位能与有效值部分一起参加运算,从而简化运算规则。
右移:除以 2 的操作
在 Java 中有俩个右移操作一个是>>,另一个是>>>
复制代码
值得注意的是系统最小取反+1 还是它自己,当你要使用最小值的时候,也就是应该换用 long 类型的时候了
应用,(~a+1)就是 a 的相反数
复制代码
版权声明: 本文为 InfoQ 作者【Cipher】的原创文章。
原文链接:【http://xie.infoq.cn/article/768996c2f0dea18b1d5841c28】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论