想了一个上午都不懂,-1在内存中的存放的二进制码为1111111111111111,这是为什么?看不懂了

按照二进制转化为十进制的原则,应该是2^0+2^1+2^2+……2^15,肯定不等于-1啊?

-1内存中是以补码的形式存放的,即二进制表示的 取反,再加1;

如-1:最左边是符号位,1表示负数。

1的二进制为000000000000001,取反为111111111111110,再加1即为111111111111111;所以整体就是上面的1111111111111111。

整型在内存中以补码形式保存,对于16位机来说,-1的原码是1 0000000 00000001,其补码就是1 1111111 11111111。

扩展资料:

假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12).在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。

若用一般公式可表示为:a-b=a-b+mod=a+mod-b。对“模”而言,2和10互为补数。实际上,以12为模的系统中,11和1,8和4,9和3,7和5,6和6都有这个特性,共同的特点是两者相加等于模。

参考资料来源:百度百科-补码

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-29
-1内存中是以补码的形式存放的,即二进制表示的 取反,再加1;
如-1:
最左边是符号位,1表示负数。1的二进制为000000000000001,取反为111111111111110
,再加1即为111111111111111;
所以整体就是上面的1111111111111111追问

也就是说不适用那个二进制转换十进制的规则了是吧??

追答

适应啊,1不就是2^0嘛。
具体你可以google下 补码

追问

我是说1111111111111111转换为十进制的话,应该是2^0+2^1+……+2^15,可是不等于-1啊,

追答

计算机取值的时候,要把补码转换过来的。补码是存储方式。

追问

哦,算的时候还得转换回来不能直接算啊!是吧?

追答

是的。
http://baike.baidu.com/view/377340.htm

本回答被提问者采纳
第2个回答  2011-12-29
计算机一般是使用补码来存储信息的,补码就是正数和原码相同,负数是源码取反后加1

例如正3在原码是00000011,这里假设8位表示,那么负3就是正3按位取反然后加1,按位取反之后是11111100,加1之后是11111101,这就是负3在内存中的表示

1也是一样,正1的表示是00000001,负1是先取反为11111110然后再加1,就是11111111

这些是计算机的基础知识,实在不懂要不买本有关计算机基础或者计算机原理的书看吧追问

1111111111111111转换为十进制的话,应该是2^0+2^1+……+2^15,可是不等于-1啊,

追答

得转换回原码的

第3个回答  2011-12-29
计算机中表示负数用的是补码。补码的规则你可以百度一下。我这里先简单说一下。
负数的补码,是将其绝对值的二进制形式取反,再加1。
比如-1的绝对值是1,1的二进制是00000001,取反是1111110,再加1就是11111111
第4个回答  2011-12-29
操作系统是多少位的,你定义的是什么类型的变量?这么问可不合适。追问

我看的是全国计算机等级考试c语言教程的书