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

#include<stdio.h>main(){inta=077;printf("%d",~a);}输出结果是-64嘛?为什么?请给个详细运算过程..谢谢了~a是077我... #include<stdio.h>
main()
{int a=077;
printf("%d",~a);}

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

a是077 我打错了 =-=
展开
 我来答
温情时光剪影
推荐于2017-12-16 · TA获得超过1634个赞
知道小有建树答主
回答量:607
采纳率:33%
帮助的人:229万
展开全部
输出结果是-8。你忽略了很重要的一点:数据是以补码存储的。

int a=007;

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

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

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

正整数补码=原码
负整数补码=原码符号位不变,其他位按位取反加1
具体请百度一下
追问
我想知道已知补码了  怎么求原码?
追答
方法一样倒退回去:
负整数的原码=补码符号位不变,其他位按位取反加1
方法完全一样即可
黄先生
2024-12-27 广告
矩阵切换器就是将一路或多路视音频信号分别传输给一个或者多个显示设备,如两台电脑主机要共用一个显示器,矩阵切换器可以将两台电脑主机上的内容renyi切换到同一个或多个显示器上;迈拓维矩矩阵切换器种类齐全,性价比高,支持多种控制方式,为工程商采... 点击进入详情页
本回答由黄先生提供
wenhao900313
2012-09-22
知道答主
回答量:26
采纳率:0%
帮助的人:16.4万
展开全部
首先把八进制的077化为二进制位00111111,int类型为两个字节,即八位二进制,首位为符号位,取反后就成了11000000,首位1表示负,然后化为十进制就是2的6次方,也就是-64.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
myfairytail
2012-09-29 · TA获得超过277个赞
知道小有建树答主
回答量:445
采纳率:0%
帮助的人:236万
展开全部
看看计算机组成原理,里面有。补码,反码,原码这些概念必须弄清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式