以char类型为例,分析数据越限的计算方法

char 数据类型占一个字节,共8位;

其范围为-128至127,即:

0x80---------------0x7f

1000 0000   ---   0111 1111

从二进制数的形式可以看到:排除首位的符号位,其他7位是从000 0000   至 111 1111 的数据是逐渐变大的,这与我们平时十进制的思维习惯是相同的,即-128至127,-128最小,127最大,从-128至127是以1递加的。

正数有128个(包括0),负数也有128个,故循环周期为256.

我们知道越限数据的结果是在char类型的范围内循环的,具体分析参考本文。以下我们抽象出计算方法:

计算机只会算加法,减法计算转换为加法计算

-129 = -128 -1 = 0x80 + 0xff = 0x7f    (进位1被舍去) = 127 = 127 - (1-1)

-138 =-128-10 =0x80 + 0xF6 = 0x76  (进位1被舍去) = 118 = 127 -(10 -1)

-128- N =                                                                        127  - ( N-1)

 

128 = 127 +1 = 0x7f +0x01 = 0x80= -128 = -128 +(1-1)

137 = 127 +10 = 0x7f + 0x0a = 0x89= -119 = -128 +(10 -1 )

127 + N =                                          =  -128 + (N-1)

总结:

负数越限,计算方法:127 -(N-1)

正数越限,计算方法:-128 +(N-1)

256 =  127 +129 = -128 +(129-1) = 0;

-256 = -128 - 128 = 127-(128-1)= 0;

举例:

char ch = -1000 = -256*3-128-104 =-768 - 128- 104  = 0-128-104 = 127 -(104-1)= 24

char ch = 1000  =  256*3 +128 +104  =768+128 +104  =  0 +127+105 =  -128+(105-1) = -24

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值