1. 是使用波浪线符号(~)来表示。
2. 这个运算符会将操作数的每一位取反,即0变为1,1变为0。
它适用于整数类型的数据。
3. 值得注意的是,按位取反运算符会将操作数的符号位也取反,因此对于有符号整数,结果可能不是我们期望的。
如果需要按位取反一个有符号整数,可以先将其转换为无符号整数再进行操作。
二进制数在内存中以补码的形式存储。
按位取反:二进制每一位取反,0变1,1变0。
~9的计算步骤:
转二进制:0 1001
计算补码:0 1001
按位取反:1 0110
转为原码:
按位取反:1 1001
末位加一:1 1010
符号位为1是负数,即-10
var x = 10;
在计算机中一个整型数4字节,1字节8位,所以数字10在计算机中存储占32位,即
00000000 00000000 00000000 00001010,
按位取反,得
11111111 11111111 11111111 11110101,
这个二进制数据就是“~10”,最高位是1表示它是个负数,那么我们如何转化为十制数呢?
这里又涉及到了负数在计算机里的存储问题,计算机里,负数以其正值的补码形式存在。
首先搞懂 “反码”,“取反”,“按位取反(~)”,这3个概念是不一样的。
取反:0变1,1变0
反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0)
按位取反(~): 这将是下面要讨论的。
-------------------------------------------------------------------------------------------------
“~”运算符在c、c++、java、c#中都有,之前一直没有遇到这个运算符。
要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。
以上是问答百科为你整理的1条关于java反码的问题「按位取反运算符的方法」希望对你有帮助!更多相关java反码补码原码的内容请站内查找。