C语言 按位取反

~-2 结果是1
怎样算出来的
要详细步骤
一楼的意思是:2的补码就是-2 ,对2的补码取反就得1
如果这样算,~1=-2 ,怎么得来
1的补码是1本身(1是正数),再取反就是11111110,换成十进制是1--126
______________________
我又查了相当问题,终于搞清楚了

要理解上面的式子,首先要知道两个概念

1.在计算机中,数值是以补码的形式存放的,运算的时候也是以补码来运算的

2.在输出表示的时候,是用原码来表示,原码的显示是为了直观.
再来算这两个问题
1的补码是本身 0000 0001 ,取反1111 1110(负数),表示时用原码,因为是负数,所以等于补码+1,1000 0001+1=1000 0010 =-2;

-2 原码: 1000 0010 以补码存放: 11111101+1=1111 1110,取反:0000 0001(正数),表示时用原码: 0000 0001=1
,因为正数的原码是本身

涉及到补码反码
2的原码是00000010
那么-2 的原码为10000010取反得反码11111101,末尾加1得补码11111110
取反后就为00000001,不就是1吗
不对,正数的原码补码和原码相同,负数才按上面的方法来求
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-06
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
第2个回答  2008-10-20
公式:
补码 = 反码 + 1

-2 在计算机中的补码形式为:0xFFFFFFFE

按位取反成为:0x000000001

--------------------------------------
2 十六进制为: 0x00000002
反码为:0xFFFFFFFD
反码+1 = 0xFFFFFFE(这就是-2)
第3个回答  2008-10-20
2的二进制: 0000 0010
-2的二进制:1111 1110
~-2: 0000 0001
负数的二进制表示方法:第一位符号位,然后取无符号部分取反后加1,得出负数的二进制表示。
第4个回答  推荐于2016-08-24
按位取反运算符(~)
按位取反运算是单目运算,用来求一个位串信息按位的反,即哪些为0的位,结果是1,而哪些为1的位,结果是0。例如, ~7的结果为0xfff8。
取反运算常用来生成与系统实现无关的常数。如要将变量x最低6位置成0,其余位不变,可用代码x = x & ~077实现。以上代码与整数x用2个字节还是用4个字节实现无关。
当两个长度不同的数据进行位运算时(例如long型数据与int型数据),将两个运算分量的右端对齐进行位运算。如果短的数为正数,高位用0补满;如果短的数为负数,高位用1补满。如果短的为无符号整数,则高位总是用0补满。
位运算用来对位串信息进行运算,得到位串信息结果。如以下代码能取下整型变量k的位串信息的最右边为1的信息位:((k-1)^k) & k。
移位运算

c语言,按位取反。
C语言的逻辑运算包括与、或、非 按位取反使用运算符~如0xFF按位取反为~(0xFF)按位取反后的结果为0x00 需要注意的是,C语言中的逻辑运算&和&&是不同的 0xFF&0xA0=0xA0 而0xFF&&0xA0=1 一个运算符是按位操作 其返回值是按位操作的结果 两个运算符是逻辑表达式,其返回值只有0和1 ...

C语言按位取反?
按位取反:1 1010 反码 末位加一:1 1011 补码 符号位为1是负数,即-11 规律:~x=-(x+1);因此,t=~10(1010)==-11;

c语言中~ x是什么意思
在C语言中,~x代表的意思是按位取反的意思。将x按位取反 比如x = 10101010b。那么~x = 01010101b。还要注意,在C语言中,还有逻辑取反符号“!”,“!x”的返回值只有0和1两种。如果x为0,则!x=1。如果x不等于0.则!x的返回值为0。

c语言中有哪些运算符按位取反?
(取反、左移、按位与、按位异或、按位或)优先级由高到低的顺序排列为取反 > 左移 > 按位与 > 按位异或 > 按位或。1、~:意思是按位取反,类似于非(!)的关系,取它的反面。2、<<: 意思是左移,移动二进制的位。3、& : 意思是按位与,类似于与(&&)的关系,一假为假。4、...

c语言里,~表示什么?
在C语言中,~是按位取反运算符,用于对一个数的所有二进制位进行取反操作。例如,~5将返回-6,因为5的二进制表示为101,取反后变为010,即2,再加上符号位变为-6。

C语言中,65的按位取反怎么算,书上的答案是190和-66,求大神解答,详细点...
在C语言中,数值65的按位取反可以通过以下步骤进行计算:1. 将65转换为二进制表示,得到01000001。2. 按位取反,即把每个0变成1,每个1变成0,得到10111110。3. 将二进制数10111110转换回十进制,计算得到190。在计算机科学中,负数通常以补码形式表示。因此,如果想要得到-65的补码表示,需要遵循以下...

c语言中的位运算符中‘按位取反’是怎么运算的,什么是负数的反码,请各...
反码是:符号位为1,其余各位求反,但末位不加1 也就是说,反码末位加上1就是补码 1100110011 原 1011001100 反 除符号位,按位取反 1011001101 补 除符号位,按位取反再加1 正数的原反补是一样的 在计算机中,数据是以补码的形式存储的:在n位的机器数中,最高位为符号位,该位为零表示为正,为...

c语言中的位运算符中‘按位取反’是怎么运算的
使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果。例如,假如计算机是32位的,接下来要计算~5的值,计算过程如下:5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101 执行~运算,即~5后: 1111 ...

C语言中取反符号怎么打出来的
C语言取反操作为位操作一种,其符号为~。位于键盘左上角,esc键下方,有一个上面为~ 下面为`的键,~符号就是用这个键打出来的。方法为 1 按住shift键,左右均可。2 按~键,即之前说的键。3 抬起shift键。~操作为单目操作,即只需要一个操作数。结果为操作数按位取反,原值某位上值为1,...

按位取反~(~1<<1)另外C语言负数按位取反是啥啊
在C语言中,负数是以补码方式存放的,计算方法为,负数绝对值对应数值的二进制值,按位取反后再加一。当负数按位取反时,就是其补码按位取反。比如,-10在存储为char型时,10的二进制值为0000 1010,取反后为1111 0101, 加一得到补码的二进制值为 1111 0110, 所以-10在存为char型时,补码的16...

相似回答