X 我知道了TIPS:左右滑动导航栏可以查看更多栏目
>> 本文固定链接: http://www.vcgood.com/archives/2660
>> 转载请注明: abcgarden 2008年08月26日 于 C语言帝国 发表
对于int数据类型可以按2字节也可以按4字节存储,因机器而已。如果是按2字节存储的话,他的上界应该是2的15次方减1(32767),上界为2的15次方的相反数(-32768),在整个范围内负整数与非负整数是各占一半的,你的理解是不符合这个条件的。
计算机中保存整数是以补码的形式保存的!(这是为了把减号运算转换为加号运算)正数的补码就是它本身!负数的补码为正数的反码加1!-32768的补码计算方法为1000 0000 0000 0000 正数327680111 1111 1111 1111 反码327681000 0000 0000 0000 补码-32768
做减法运算的方法为把减号当做后一个数字的符号位!
然后换算为补码形式!两个补码相加,别管溢出情况,就是得到的数值!
比如: 32767-327680111 1111 1111 1111 + 1000 0000 0000 0000=1111 1111 1111 1111(补码形式的-1,减1取反就是正数1的补码)
在32位系统中,例如 VC 编译器,int 是32位,4字节。TC 中是16位。
版主的 数制学的很好啊!!!
这样讲就没什么好挑剔的了~~
初学者来了。。。。 学习
你必须先 登录才能发表评论。
对于int数据类型可以按2字节也可以按4字节存储,因机器而已。如果是按2字节存储的话,他的上界应该是2的15次方减1(32767),上界为2的15次方的相反数(-32768),在整个范围内负整数与非负整数是各占一半的,你的理解是不符合这个条件的。
计算机中保存整数是以补码的形式保存的!(这是为了把减号运算转换为加号运算)
正数的补码就是它本身!
负数的补码为正数的反码加1!
-32768的补码计算方法为
1000 0000 0000 0000 正数32768
0111 1111 1111 1111 反码32768
1000 0000 0000 0000 补码-32768
做减法运算的方法为把减号当做后一个数字的符号位!
然后换算为补码形式!两个补码相加,别管溢出情况,就是得到的数值!
比如: 32767-32768
0111 1111 1111 1111 + 1000 0000 0000 0000
=
1111 1111 1111 1111(补码形式的-1,减1取反就是正数1的补码)
在32位系统中,例如 VC 编译器,int 是32位,4字节。TC 中是16位。
版主的 数制学的很好啊!!!
这样讲就没什么好挑剔的了~~
初学者来了。。。。 学习