c语言程序运行结果为什么出现1.#INF00

 时间:2024-10-03 12:32:37

是因为运算结果溢出。霄膀攴褂

解决办法,例:

chara=126,则a+45=126+45=172-婷钠痢灵256=-85

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

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

无符号a-->有符号b

if(a<max_count/2)b=a

elseb=a-[max_count]

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

if(a>0)b=a

elseb=a+[max_count]

例1chara=-119;ucharb=a;则b=-119+256=137

例2uchara=137;charb=a;则b=137-256=-119

例3signedcharchr=127;

intsum=127;

chr+=10;

sum+=chr;

sum值是

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

c语言程序运行结果为什么出现1.#INF00

扩展资料

溢出的原因,考虑两个非负整数x和y,满足0<=x,y<=(2^w)-1。xy可以被表示为w位无符号数字,然而考虑它们的和的话,我们可以得到0<=x+y<=2^(w+1)-2。这个和需要w+1位来表示。如果再用其他数加上这个结果的话,可能又将需要w+2,w+3位来表示新的结果。

这种持续的“字长膨胀“意味着,如果想要完整地表示算数运算的结果,就不能对字长做任何限制(实际上Lisp就是这样干的)。如果限制了数据类型的字长,溢出的发生是不可避免的。由于溢出后的结果往往不是想要的结果,必须对溢出时的情形另做处理,但在此之前我们必须得先能够判断什么时候发生了溢出。

无符号整数的溢出判断比较简单:对一个字长w的无符号数加法运算,当x+y>=2^w时,第w+1位被程序舍去,相当于在x+y的和的基础上减去了2^w。由于x,y<=(2^w)-1,所以有x+y<x(或者x+y<y)。

intuadd_ok(unsignedx,unsignedy){

unsignedsum=x+y;

returnsum>=x;

}

scanf_s与scanf的区别是什么 VS 2012使用C/C++下如何添加显示行数 tanx的积分是什么 矩阵的特征方程怎么求 型芯的主要作用
热门搜索
qq图片下载 你懂得电影 2020年的图片 幼儿园主题墙饰图片 端午节吃粽子图片