Java按位运算符之按位取反

Posted Fearless

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java按位运算符之按位取反相关的知识,希望对你有一定的参考价值。

一 数据储存形式
二进制在内存中以补码的形式存在。
补码首位是符号位,0表示该数是正数,1表示该数是负数。
 
例如:
 
数值
带符号的二进制原码
(首位表示符号位)
补码
内存中的形式
(*表示无效位,其数量取决于分配的内存空间)
9 01001 01001 0***1001
-5 1***101  1***011  1***011 
 
 
二 补码是什么
正数: 补码 = 反码 = 原码
负数: 原码取反 = 反码,反码+1 = 补码
 
⚠️运算时: 符号位不变,有效位进行运算!带*号的为无效位。
 
例如:
  原码 反码 补码
9 01001 01001 0***1001
-5 1***101 1***010 1***011
原码中: 9的有效位为1001,5的有效位为101。  
 
三 计算机输出数据的方式
 
                转换   
内存中补码 ———————> 原码 (显示)
 
 
四 按位取反运算符"~"的原理
按位取反: 将内存中的补码按位取反,包括符号位!!
 
例如:
                                      按位取反~                               原码显示
 9  ---->    补码 0***1001  --------------->    补码 1***0110    -------------->  1***1010  (-10)     
 
                                  按位取反~                                     原码显示
-5 ---->    补码 1***011    --------------->     补码 0***100     -------------->  4  (补码是正数,所以原码也为4) 
 
 

以上是关于Java按位运算符之按位取反的主要内容,如果未能解决你的问题,请参考以下文章

按位取反运算符与补码

按位与,按位或,按位异或,按位取反

复习一个小知识点(反码与按位取反)

JAVA位运算符与移位运算

JAVA位赋值条件运算符等

JS按位非(~)运算符与~~运算符的理解分析