黑马程序员技术交流社区

标题: 关于有符号数在计算机中的存储问题 [打印本页]

作者: xuexiujuan_1991    时间: 2015-7-20 23:22
标题: 关于有符号数在计算机中的存储问题
我们都知道无符号数在计算机中就是相当于一个正数,它是直接将其转换为二进制数直接存储,而有符号数即意味着有负数的存在。以一个字节为例,一个字节有8位,若用来存储有符号数,那么最高位就是符号位,最高位为0代表是正数,最高位为1代表是负数,那么这个字节可以存储的最大数就为01111111,换算成十进制就是127,而最小的数最后换算成十进制数怎么就是-128,它的补码是什么?怎么得来的?求解
作者: 慕名黑马生    时间: 2015-7-21 00:16
计算机用补码做加法计算,当-1+(-127)时,计算机补码计算为1111 1111+1000 0001=1 0000 0000即为-128,但如果根据100000000反过来计算又不能还原计算,所以严格讲为-127,但你要知道这个算法就行
作者: xuexiujuan_1991    时间: 2015-7-21 09:20
哦,可不可以这样理解,-127的源码是11111111,那么它的补码就是10000001,-126的源码是11111110,它的补码就是10000010,-125的源码是11111101,它的补码就是10000011,可以看出有一个规律,符号位以后7位的数值依次增大,而它们所对应的十进制数值的绝对值依次减小,既然在内存当中负数是以补码的形式存储的,那我们理应想到还有一个比-127更小的数,而且是小1,那它的补码就应该是10000000,除去符号位另外7位各位取反就应该是1111111,在此基础上再加1,就得到了它的源码10000000,所以应该是-128,不知有无道理
作者: xuexiujuan_1991    时间: 2015-7-21 09:22
慕名黑马生 发表于 2015-7-21 00:16
计算机用补码做加法计算,当-1+(-127)时,计算机补码计算为1111 1111+1000 0001=1 0000 0000即为-128,但 ...

哦,可不可以这样理解,-127的源码是11111111,那么它的补码就是10000001,-126的源码是11111110,它的补码就是10000010,-125的源码是11111101,它的补码就是10000011,可以看出有一个规律,符号位以后7位的数值依次增大,而它们所对应的十进制数值的绝对值依次减小,既然在内存当中负数是以补码的形式存储的,那我们理应想到还有一个比-127更小的数,而且是小1,那它的补码就应该是10000000,除去符号位另外7位各位取反就应该是1111111,在此基础上再加1,就得到了它的源码10000000,所以应该是-128,不知有无道理
作者: 爱生活爱程序    时间: 2015-7-21 11:46
在计算机中存储的都是补码,负数的补码事它本身取反后价1的结果
-128
本身: 10000000
取反: 11111111
补码:  10000000




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2