永发信息网

关于~按位取反运算符的问题.

答案:3  悬赏:60  手机版
解决时间 2021-02-01 19:23
  • 提问者网友:辞取
  • 2021-01-31 23:58
#include<stdio.h>
main()
{int a=077;
printf("%d",~a);}

输出结果是-64嘛? 为什么? 请给个详细运算过程..谢谢了~

a是077 我打错了 =-=
最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-02-01 01:10
输出结果是-8。你忽略了很重要的一点:数据是以补码存储的。

int a=007;

那么存储的二进制为: 0000...0111 (共32位)

取反~a后得:1111...1000 (共32位) 但是这是补码

将补码换算成原码:1000...1000(共32位)即-8

正整数补码=原码
负整数补码=原码符号位不变,其他位按位取反加1
具体请百度一下
全部回答
  • 1楼网友:千夜
  • 2021-02-01 02:38
首先把八进制的077化为二进制位00
  • 2楼网友:笑迎怀羞
  • 2021-02-01 02:15
首先看等号左边 (100)的二进制表示为:01100100 按位取反的意思就是每一位取反,0变1,1变0 所以: ~100的二进制表示为:10011011 所以等号左边=10011011 再看右边 -101.一旦看到出现负数,那么这个数一定是按有符号数的规则来表示的。一个二进制数按位取反并加一以后就可以得到它自己的负数的补码,也就是说: ~x+1=-x 所以,我们把101按位取反加一 先取反: ~101=10011010 再加一: ~101+1=10011011=-101 所以等号右边=10011011=左边,所以等号成立。 p.s:补充一句,计算机内存里的逻辑存储位是非常复杂的,我这里即使讲得再清楚也无法保证你完全明白。 一般来说,汇编语言的书的开头部分会详细讲解这部分知识以服务于汇编语言,请参阅之。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯