回复 3楼 rupei110
恩,你分析的很不错,那么我们一起来看看:
如果符号位为1代表负数,为0代表正数,那么取值范围就是 127 ~ -127,这样的话0就有两种表示方法,0x80(10000000),和0x00(00000000),
但是在目前为了更多的利用这个字节,计算机采用的是补码,什么是补码呢?是这样的:
只要符号位为1,也就是说这个数代表负数,那么把这个数,先取反,再加1后,得到一个新的负数,如11111111,取反后得到00000000,加1后得到00000001,那么这个数就是-1,想一想,这样编码0就只有一种表示方法,0x00(00000000),而0x80(10000000)呢,在上面它也代表0,而现在:取反得01111111,加1得10000000,它就代表-128,-127是什么呢?就是0x81(10000001),-126就是0x82(10000010),一直到-1,0xFF(11111111),再减1,就变成了0,0x00(00000000),再加1就是1,0x01(00000001),一直到127,0x7F(01111111),这就是一些书上说的,它就像一个汽车的里程表一样,会倒回去,呵呵。
这样做是对的,如果是1字节无符号数,unsigned char,那么它可以表示0 ~ 255,可以表示256种状态,用补码的方法来表示也是256种状态,0 ~ 127,-128 ~ -1,只要LZ记住,在C里,一个有符号整数已经达到它可以表示的最大正整数,如果在此基础上加1,那么它就会变成最小的负数,而最小的负数加-1,就变成了最大的正整数。这就是它回倒的过程。
[
本帖最后由 lz1091914999 于 2011-6-25 09:25 编辑 ]