本文目录一览:
取反运算是什么意思?
比如说byte类型的5,在内存中是00000101,按位取反后就是11111010
当你再次输出这个数时就变成了250
按位取反就是1变0,0变1
首先你要知道现在我们用的多数都是32位机,所以整形数都是4个字节
那么再看看按位取反的结果:
00000000 00000000 00000000 00000101 这是5
00000000 00000000 00000000 00000000 这是0
11111111 11111111 11111111 11111111 这是-1
11111111 11111111 11111111 11111110 这是-2
11111111 11111111 11111111 11111101 这是-3
11111111 11111111 11111111 11111100 这是-4
11111111 11111111 11111111 11111011 这是-5
11111111 11111111 11111111 11111010 这是5取反的结果-6
C语言中的位运算符是怎么取反的
~1010的反码是0101
而负数在计算机中的表示是用补码,-11求补码过程:1011取反-0100加1-0101
即-11等价于~10
括号中的是0101
补充说明:是这样的,1010在32位计算机中的存储实际上是00001010,取反后是11110101,在计算机中首位是0表示正数,是1表示负数,即11110101表示的是一个负数,即要由11110101求这个负数,即求补码的逆,步骤:先减1得11110100,再取反,取反时符号位不变,得10001011,即-11。用4位表示的话可以填0101,或者是8位的11110101
~取反运算符
在java虚拟机中整数有byte、short、int、long四种 分别表示 8位、16位、32位、64位有符号整数。
(1)在Java中,所有数据的表示方式都是以补码形式来表示
(2)正数:原码、反码、补码相同
(3)负数:符号位为1,其余各位是对原码取反,然后整个数加1
(4)~按位取反(反码加1称为补码。)步骤就是先求出这个数(因为java存的数是补码)的原码,然后对原码取反得到X,这个X就是我们要求的那个数的补码
引用:
例如 57的二进制数是原码(表示一个字节 8bit) 0011 1001
,~表示按位取反
其57按位取反后二进制表示为(表示一个字节 8bit) 1100 0110
1100 0110 (最前面的第一位表示符位 )
1表示次数为负数
1100 0110 可表示为 -(2^6+2^2+2^1) = -70;
负数在计算机里面要用补码来表示
即补码=符号位以后的按位取反后加1
反之减1
所以 -70 = 1100 0110 符号位以后按位取反后再加一为 1011 1010 = -58
即~57 = -58;
负数反之即可。
c语言中的位运算符中‘按位取反’是怎么运算的
使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果。
例如,假如计算机是32位的,接下来要计算~5的值,计算过程如下:
5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101
执行~运算,即~5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6
以上过程没有任何问题,但如果忘记了负数的二进制表达方式,那么就会对这个结果产生疑问,为什么1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能会以为它应该表示-10等等,所以,使用~按位取反的另一个关键就是理解1111 1111 1111 1111 1111 1111 1111 1010为什么表示-6,也即理解负数的二进制表达方式。
扩展资料
js取整
~是按位取反运算,~~是取反两次
在这里~~的作用是去掉小数部分
因为位运算的操作值要求是整数,其结果也是整数,所以经过位运算的都会自动变成整数
除了~~n 还可以用
n0
n0
n|0
C语言中取反运算符'"!"如何使用?
运算符"!"是逻辑非运算符;"~"才是按位取反运算符。
经过"!"运算后,运算结果只有0或1;而经过"~"运算后,结果有多种,取决于操作数。
下面通过实例来介绍这个运算符的使用方法:
int a=10, b, c;
b = !a; // 运算后b=0,因为a不等于0(即为真),所以取非后等于0(为假)
c = ~a; // 运算后c=5,因为a的二进制位1010,按位取反后变为0101(即等于5)