关于c语言按位取反的运算

表达式~0x11的值是()
在计算的时候,是应该把十六进制的0x11转换成十进制17,然后再转换成二进制10001,按位取反为01110,再转换成十进制为14,不应该是0xE 么?答案给的是0xFFEE,请问是怎么计算的啊?我的理解是不是有错误啊?
谢谢大家

两者都为1为1,否则为0。

1&1=1,1&0=0,0&1=0,0&0=0

或运算:|

两者都为0为0,否则为1

1|1=1,1|0=1,0|1=1,0|0=0

非运算:~

1取0,0取1

~1=0,~0=1

~(10001)=01110

异或运算

两者相等为0,不等为1

1^1=0,1^0=1,0^1=1,0^0=0

扩展资料:

位运算符有:

&(按位与)、|(按位或)、^(按位异或)、~(按位取反)。

其中,按位取反运算符是单目运算符,其余均为双目运算符。

位运算符的优先级从高到低,依次为~、&、^、|,

其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-07
十六进制转化为2进制不用这么做,
将每位十六进制变成4位二进制即可,所以
11(16) = 0001 0001(2)
~0x11 这个0x11是整型常量
所以 = ~0x 0011
= 0xFFEE追问

谢谢你哈!

第2个回答  2012-08-07
0x11=0x0011= 0000 0000 0001 0001(不用转成十进制再转二进制,太麻烦,一个16进制的位直接转成四位二进制的位就可以了)
再取反就得到1111 1111 1110 1110即0xFFEE
问题的关键是要把位补齐了,前面的0不能省了呀追问

谢谢你哈,我还想问的是,为什么转换的时候要将原来的两位的十六进制0x11变为四位0x0011来表示,再进行转换啊?

追答

和你细说吧,四位二进制数,比如1111,是不是就是十进制的15,也就是16进制的F,习惯了,2的四次方是16,所以就是四位二进制就表示一个16进制的位。习惯了就知道了 十六进制的ABCDEF对应二进制的1010 1011 1100 1101 1110 1111

同理,三位二进制可以表示一个八进制数。

但要记得从低位开始,高位不足的先补0

追问

谢谢你哈!

本回答被提问者采纳

C语言中,65的按位取反怎么算,书上的答案是190和-66,求大神解答,详细点...
1. 首先,得到65的二进制表示,即01000001。2. 然后,将这个二进制数除符号位外的部分取反,得到10111110。3. 最后,将取反后的结果加1,得到10111111。因此,-65的补码表示为10111111。在C语言中,这会被视为负数-66,因为C语言中的整数类型会根据符号位来解释这个补码表示的数。

关于c语言按位取反的运算
两者都为1为1,否则为0。1&1=1,1&0=0,0&1=0,0&0=0 或运算:| 两者都为0为0,否则为1 1|1=1,1|0=1,0|1=1,0|0=0 非运算:~1取0,0取1 ~1=0,~0=1 ~(10001)=01110 异或运算 两者相等为0,不等为1 1^1=0,1^0=1,0^1=1,0^0=0 ...

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

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

c语言中有哪些运算符按位取反?
1、~:意思是按位取反,类似于非(!)的关系,取它的反面。2、<<: 意思是左移,移动二进制的位。3、& : 意思是按位与,类似于与(&&)的关系,一假为假。4、^:意思是按位异或,通俗地说就是相同为0,不同为1.5、|:意思是按位或,类似于或(||)的关系,一真为真。

c语言中的位运算符中‘按位取反’是怎么运算的
执行~运算,即~5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6 以上过程没有任何问题,但如果忘记了负数的二进制表达方式,那么就会对这个结果产生疑问,为什么1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能会以为它应该表示-10等等,所以,使用~按位取反的另一个关键就是理解...

c语言中的位运算符中‘按位取反’是怎么运算的,什么是负数的反码,请各...
符号位为1,取反+1为 1010 转化成10进制为 -2 正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位加1 反码是:符号位为1,其余各位求反,但末位不加1 也就是说,反码末位加上1就是补码 1100110011 原 1011001100 反 除符号位,按位取反 1011001101 补 除符号...

c语言中按位取反-1怎么算
c语言中-1的绝对值是1,二进制00000001,取反为11111110,-1为11111111,取反是00000000。1、所有正整数的按位取反是其本身+1的负数;2、所有负整数的按位取反是其本身+1的绝对值;3、零的按位取反是-1(0在数学界既不是正数也不是负数);0的原码:00000000000000000000000000000000 取反:...

~3的运算结果c语言
在C语言中,`~3`的运算结果取决于3在内存中的二进制表示。`~`是按位取反运算符,它会对操作数的每一位执行取反操作。首先,我们需要了解3在内存中的二进制表示。在大多数系统中,整数采用补码形式存储。对于一个32位系统,整数3的二进制补码表示为:`00000000 00000000 00000000 00000011`(这里...

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

相似回答