C语言溢出计算

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-17 04:09   127   0
类型名称占字节数其他叫法表示的数据范围
char1signed char-128 ~ 127
unsigned char1none0 ~ 255
int4signed int-2,147,483,648 ~ 2,147,483,647
unsigned int4unsigned0 ~ 4,294,967,295
short2short int-32,768 ~ 32,767
unsigned short2unsigned short int0 ~ 65,535
long4long int-2,147,483,648 ~ 2,147,483,647
unsigned long4unsigned long0 ~ 4,294,967,295
float4none3.4E +/- 38 (7 digits)
double8none1.7E +/- 308 (15 digits)
long double10none1.2E +/- 4932 (19 digits)

最大值溢出后变为最小值;最小值溢出后变为最大值。

如:

char a=127 a+1为-128

char a=-128 a-1为127

uchar a=255 a+1为0

uchar a=0 a-1 为255

溢出后的数值计算:

上溢: - [max_count]

下溢: +[max_count]

例如:

char a=126 ,则a + 45 =126+45 =172-256 = -85

uchar a = 2 ,则 a - 100 = -98+256 = 158

a,b 基本类型相同时,有符号与无符号数的转换:

无符号a-->有符号b

if(a<max_count/2) b = a

else b = a - [max_count]

有符号数a-->无符号数b

if(a>0) b = a

else b = a + [max_count]

例1 char a = -119 ;uchar b = a;则b = -119 +256 = 137

例2 uchar a = 137 ; char b = a; 则 b = 137 - 256 = -119

例3 signed char chr = 127;

int sum =127;

chr+=10;

sum+=chr;

sum值是

思路 先把chr当成无符号数,chr +=10变成137 然后把chr转化为有符号数137-256 = -119 。-119 + sum (127) = 8.

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP