有符号型数据及其加减法

以 char 型数据作为分析对象
Char a;
首先,a 的表示范围为-128~127
十进制 二进制 十六进制
0 0000 0000 0x00
1 0000 0001 0x01
…… …… ……
127 0111 1111 0x7F
-128 1000 0000 0x80
-127 1000 0001 0x81
…… …… ……
-1 1111 1111 0xFF
a = 0;
循环执行 a -= 1; a的变化过程为:
-1 ——> -128 ——>127 ——> 0
0xFF ——> 0x80 ——>0x7F ——> 0x00
循环执行 a += 1; a 的变化过程为:
0 ——> 127 ——> -128 ——> -1
0x00 ——> 0x7F ——>0x80 ——> 0xFF
分析:
0 – 1, 结果为-1 ,在内存中的表示为:(1)1的原码 0x01,(2)反码 0xfe ,(3)补码 0xff
-1-1,结果为 -(1+1)=-2, 在内存中:(1)2的原码 0x02,(2)反码 0xfd ,(3)补码 0xfe
-128-1,结果为-(129),在内存中:(1)129的原码 0x81,(2)反码 0x7e ,(3)补码 0x7f 0x7f = 127
显然,循环加或循环减,内存中的数据时连续加1或连续减1的,但是由于a是有符号型数据,所表示的数并不是连续的。

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/245/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名