#include<stdio.h>
main()
{int a=077;
printf("%d",~a);}
输出结果是-64嘛? 为什么? 请给个详细运算过程..谢谢了~
a是077 我打错了 =-=
关于~按位取反运算符的问题.
答案:3 悬赏:60 手机版
解决时间 2021-02-01 19:23
- 提问者网友:辞取
- 2021-01-31 23:58
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-02-01 01:10
输出结果是-8。你忽略了很重要的一点:数据是以补码存储的。
int a=007;
那么存储的二进制为: 0000...0111 (共32位)
取反~a后得:1111...1000 (共32位) 但是这是补码
将补码换算成原码:1000...1000(共32位)即-8
正整数补码=原码
负整数补码=原码符号位不变,其他位按位取反加1
具体请百度一下
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:补充一句,计算机内存里的逻辑存储位是非常复杂的,我这里即使讲得再清楚也无法保证你完全明白。
一般来说,汇编语言的书的开头部分会详细讲解这部分知识以服务于汇编语言,请参阅之。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯