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 ----> 补码 0***1001 ---------------> 补码 1***0110 --------------> 1***1010 (-10)
按位取反~ 原码显示
-5 ----> 补码 1***011 ---------------> 补码 0***100 --------------> 4 (补码是正数,所以原码也为4)
以上是关于Java按位运算符之按位取反的主要内容,如果未能解决你的问题,请参考以下文章