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)     
 
                               按位取反~                            原码显示
-1 ---->     补码 1***1    ------------->   补码 0***0      ----------->  0  (补码是正数,所以原码也为0) 
 
 

猜你喜欢

转载自www.cnblogs.com/CTW42/p/12375142.html