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

#include<stdio.h>
main()
{int a=077;
printf("%d",~a);}

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

a是077 我打错了 =-=

输出结果是-8。你忽略了很重要的一点:数据是以补码存储的。

int a=007;

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

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

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

正整数补码=原码
负整数补码=原码符号位不变,其他位按位取反加1
具体请百度一下追问

我想知道已知补码了 怎么求原码?

追答

方法一样倒退回去:
负整数的原码=补码符号位不变,其他位按位取反加1
方法完全一样即可

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-22
首先把八进制的077化为二进制位00111111,int类型为两个字节,即八位二进制,首位为符号位,取反后就成了11000000,首位1表示负,然后化为十进制就是2的6次方,也就是-64.
第2个回答  2012-09-29
看看计算机组成原理,里面有。补码,反码,原码这些概念必须弄清楚。
相似回答