当前位置:懂科普 >

综合知识

> 按位取反运算符怎么用 c语言中的位运算符中‘按位取反’是怎么运算的

按位取反运算符怎么用 c语言中的位运算符中‘按位取反’是怎么运算的

1.c语言中的位运算符中‘按位取反’是怎么运算的

使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果。

按位取反运算符怎么用 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 还可以用

n<<0

n>>0

n|0

2.按位取反 运算符

首先看等号左边 (100) 的二进制表示为: 0110 0100 按位取反的意思就是每一位取反,0变1,1变0 所以: ~100 的二进制表示为:1001 1011 所以等号左边=1001 1011 再看右边 -101. 一旦看到出现负数,那么这个数一定是按有符号数的规则来表示的。

一个二进制数 按位取反并加一以后就可以得到它自己的负数的补码,也就是说: ~x+1=-x 所以,我们把101按位取反加一 先取反: ~101=10011010 再加一: ~101+1=10011011=-101 所以等号右边=10011011=左边,所以等号成立。 P.S:补充一句,计算机内存里的逻辑存储位是非常复杂的,我这里即使讲得再清楚也无法保证你完全明白。

一般来说,汇编语言的书的开头部分会详细讲解这部分知识以服务于汇编语言,请参阅之。

3.按位取反运算符

~077o=11000000b是没有错的,但在计算机中,整数是使用补码来表示的。正数的补码与原码相同,而负数的补码则是最高位为1表示负数,其余低位是将该负数的绝对值取反加1来表示的。

例如-64d,如果用8位二进制补码表示的话,最高位为1表示负数,其余7位则将-64d的绝对值64d=1000000b,取反加1得1000000,与符号位(最高位)1拼接就是11000000,所以11000000表示-64d。(后缀o表示八进制数,d表示十进制数,b表示二进制数)。

4.c语言中的位运算符中‘按位取反’是怎么运算的,什么是负数的反码

0001

取反

1110

符号位为1,取反+1为

1010

转化成10进制为

-2

正数的原码,补码,反码都相同,都等于它本身

负数的补码是:符号位为1,其余各位求反,末位加1

反码是:符号位为1,其余各位求反,但末位不加1

也就是说,反码末位加上1就是补码

1100110011 原

1011001100 反 除符号位,按位取反

1011001101 补 除符号位,按位取反再加1

正数的原反补是一样的

在计算机中,数据是以补码的形式存储的:

在n位的机器数中,最高位为符号位,该位为零表示为正,为1表示为负;

其余n-1位为数值位,各位的值可为0或1。

当真值为正时:原码、反码、补码数值位完全相同;

当真值为负时:

原码的数值位保持原样,

反码的数值位是原码数值位的各位取反,

补码则是反码的最低位加一。

注意符号位不变。

如:若机器数是16位:

十进制数 17 的原码、反码与补码均为: 0000000000010001

十进制数-17 的原码、反码与补码分别为:1000000000010001、1111111111101110、1111111111101111

5.c语言中的按位取反及其他的为运算符有什么实际作用

按位与(&)也是双目运算符。。同“与门”基本一致。。只是涉及位运算。

可参考下面这个例子。

多个对象的话,假设 a & b & c,只有当 abc 都为真的时候,输出才是真。

其实 a & b & c = (a & b) & c,可以把 a & b 的结果当作一个输入,然后再与 c 运算。

多个对象其实也一样。。大同小异。

6.C语言中的位运算符是怎么取反的

a为int类型 通常占4个字节

2的原码:0000 0000 0000 0000 0000 0000 0000 0010

取反: 1111 1111 1111 1111 1111 1111 1111 1101

最高位是1所以是负数,求其原始数据,方法是

再次取反加1(符号位不变)

取反: 1000 0000 0000 0000 0000 0000 0000 0010

加1 1000 0000 0000 0000 0000 0000 0000 0011

所以是 -3

  • 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/zonghezhishi/orm3vl.html