c语言中的位运算符中‘按位取反’是怎么运算的
比如操作数位操作位表达式数字~10→~1010→()→-11括号中该是什么。怎么得到的-11还是不明白。既然~1010取反后是0101了。0101不就是5的二进制吗。.....
比如 操作数 位操作 位表达式 数字
~10 → ~1010 → () → -11
括号中该是什么。怎么得到的-11
还是不明白。既然~1010取反后是0101了。0101不就是5的二进制吗。....怎么又跑出-11了。(最好来个计算公式) 展开
~10 → ~1010 → () → -11
括号中该是什么。怎么得到的-11
还是不明白。既然~1010取反后是0101了。0101不就是5的二进制吗。....怎么又跑出-11了。(最好来个计算公式) 展开
5个回答
展开全部
使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果。
例如,假如计算机是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
展开全部
~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
而负数在计算机中的表示是用补码,-11求补码过程:1011取反->0100加1->0101
即-11等价于~10
括号中的是0101
补充说明:是这样的,1010在32位计算机中的存储实际上是00001010,取反后是11110101,在计算机中首位是0表示正数,是1表示负数,即11110101表示的是一个负数,即要由11110101求这个负数,即求补码的逆,步骤:先减1得11110100,再取反,取反时符号位不变,得10001011,即-11。用4位表示的话可以填0101,或者是8位的11110101
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
位运算中的按位取反操作,使用的运算符为~, 其计算原则为:
按照操作数的二进制值,逐位计算,如果原始值为0,则结果该位上为1, 否则结果该位上为0。
比如char类型的0x78按位取反
~0x78
=~B0111 1000//转为二进制值。
=B1000 0111//按位取反。
=0x87
按照操作数的二进制值,逐位计算,如果原始值为0,则结果该位上为1, 否则结果该位上为0。
比如char类型的0x78按位取反
~0x78
=~B0111 1000//转为二进制值。
=B1000 0111//按位取反。
=0x87
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
计算机存储的数不是只有4位的
像32位计算机,存储int类型的数就用32位
所以上面10的二进制码1010,前面还有好多0,取反的时候要一起取反
简单的话,以8位二进制码为例
括号中就是11110101,也就是00001010取反的结果
这是补码
-10的补码是10的补码(正数的补码就是原码)取反加1
既然这里只取反没加1,所以就是-10-1=-11
数转补码
正数就是二进制码
负数是相反数(即取绝对值)的二进制码取反加1
补码转数
正数(二进制最高位为0)直接转
负数(二进制最高位为1)减1取反转成十进制进制数再加个负号
像32位计算机,存储int类型的数就用32位
所以上面10的二进制码1010,前面还有好多0,取反的时候要一起取反
简单的话,以8位二进制码为例
括号中就是11110101,也就是00001010取反的结果
这是补码
-10的补码是10的补码(正数的补码就是原码)取反加1
既然这里只取反没加1,所以就是-10-1=-11
数转补码
正数就是二进制码
负数是相反数(即取绝对值)的二进制码取反加1
补码转数
正数(二进制最高位为0)直接转
负数(二进制最高位为1)减1取反转成十进制进制数再加个负号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言经典例子之按位取反运算符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询