一张图总结计算机中数的表示

complement

1、数学中可以用∞表示无限大,但是在计算机具体实现中却只能把这种抽象具体化,比如用100位二进制表示一个数;100位二进制也仅能2^100个数,不过这对我们来说已经是天文字了,我们可以把2^100-1看成是无限大了~

2、对于任何一个特定的类型在特定的系统下都对应一个固定的字节数,下面假定char占用1个字节。对于unsigned char i,while(1){i++}会一直增大,直到最大1111 1111,继续加1变成1 0000 0000,这个数在数学上是没问题的,多大的数都能表示,但是计算机只用8bit表示char,所以多出的1只能被丢弃,也就是发生了上溢,结果变成了0 ;对于signed char j, while(1){j++}也会一直增大,因为最高位表示符号位,所以增加到0111 1111时达到最大值 ,继续加1变成1000 0000,变成最小的负数(一下子从天上掉到了地狱里:P), 然后又慢慢变大,直到最大的负数1111 1111;

3、顺时针方向数据一直增大直到溢出,对无符号数来说,这个过程是线性稳定增长的;对有符号来说是两次线性增长的组合 ,中间会发生一次巨变(最大的正数->最小的负数);

4、如果1xxx xxxx0yyy yyyy关于竖线对称,则顺时针移动1xxx xxxx个单位等同于逆时针移动0yyy yyyy个单位;补码的思想就是把减法转换成加法,即把逆时针移动0yyy yyyy个单位转换成顺时针移动1xxx xxxx个单位,因此也就把1xxx xxxx定义成了负0yyy yyyy的补码,这样可以简化计算机设计。又因为1xxx xxxx + 0yyy yyyy = 2^8, 所以求补码的运算就变得异常简单:

  -3(补)=2^8 - 3 = 1111 1111 - 0000 0011 = 1111 1100
  -126(补)=2^8 - 126 = 1111 1111 - 0111 1101 = 1000 0010

5、 一篇很好的关于补码的介绍文章

http://blog.chinaunix.net/uid-26495963-id-3075218.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值