C语言问题:浮点数乘以无符号整数结果

作者&投稿:仲孙梦 (若有异议请与网页底部的电邮联系)
C语言,无符号变量乘以小数,谢谢~

得数的类型是double型。因为C默认小数形式的常数是double型,而uint型比double型“短”,按向“长”类型看齐的规则自然是double型。

C语言中无符号整型转换成浮点型方法如下:
unsigned int x=123;
1、输出强制转换,如:
printf("%f", x ); //这样的输出因为%f与x的类型不同,导致输出数据异常
printf("%f", (float)x ); //强制转换成浮点型,可正确输出
2、存储到相应的变量中,如:
float fVal;
fVal=x ; //系统会隐式转换 因float的有效数位最大为7位,所以,并不是所有整数都可以用float类型变量来表示,所以,最好使用double类型来存储任意的整数
printf("%f", fVal ); //输出正常

double dVal;
dVal=x ; //系统会隐式转换
printf("%f", dVal ); //输出正常

这样写问题也不是很大,可以计算,编译器会按照向上转化计算后在截断处理。所以上面的计算过程:

100*0.09 ==>100.0*0.09;// 转化为浮点型计算

9.00==>depth;//截断处理在赋给整型


int main()
{  
unsigned long int depth ;

float t=0.0f;

depth = t= 100*0.099;

printf("unsigned long int depth = %d,float t = %0.2f
",depth,t);
}

简单的测试,结果如图:



  浮点数乘以无符号整数结果还是浮点数;

  int main(){

  unsigned long int depth ;

  float  t = 0.0f;

  depth = t = 100*0.099;

  printf("unsigned long int depth = %d, float t = %0.2F
",depth,t );

  }

  结果如下:


  浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。



  这个肯定是 9 ,因为 100 * 0.09 这是个常量表达式,生成的程序时候,编译器早计算出结果了。

也就是说编译器会成诸如下面的指令

mov         dword ptr [depth],9 //这个9生成程序时已经计算出来了


如果你改成如下代码

unsigned long int depth  = 100;//这里初始化
depth *= 0.09; //这里乘法复合
printf("%d
",depth);

答案 也是9 ,为什么, 因为这个精度FPU是支持的。。



9呀 没什么好解释的吧。。。

哦 你问的是微处理器 我不懂这玩意

C语言学习,浮点型数据的问题
答:目前大多数高级语言(包括C)都按照IEEE-754标准来规定浮点数的存储格式,IEEE754规定,单精度浮点数用4字节存储,双精度浮点数用8字节存储,分为三个部分:符号位、阶和尾数。阶即指数,尾数即有效小数位数。单精度格式阶占8位,尾数占24位,符号位1位,双精度则为11为阶,53位尾数和1位符号位。

在c语言中%3c 是什么意思
答:是C语言中的格式字符,c代表了输出字符类型,3代表了占位情况,%3c的意思是输出一个占位3的字符。式样化规定字符, 以"%"开端, 后跟一个或几个规定字符, 用来确定输出内容式样。

%.*lf 简单的c语言
答:printf("%.2lf\n" ,m,input) 是输出一个浮点数,保留两位小数。其中,函数调用时格式串中的*号会被参数中的m代替。其中,%f 对应 float;%lf 对应 double;%lf 对应 long double;%e以科学计数法显示;%g在%e和%f中择短显示,

C语言 无符号16位转换为浮点型的错误?
答:c=(float)(1.6*(a/65535));这里a/65535只有当a=65535时结果为1,其他情况下结果都为0 进入错误中断应该不是c=(float)(1.6*(a/65535));这个语句造成的

c语言中如何输入一个浮点数x然后输出x但保留五位小数
答:声明变量x为double型(浮点双精度)或float(浮点单精度)。调用输入函数scanf("%lf",&x);或scanf("%f",&x);——其中%lf表示x是double型、%f表示float型。调用printf("%.5f\n",x);输出——其中.5表示小数点后保留5位小数。

请教C语言浮点数输出问题。
答:Java 语言支持两种基本的浮点类型: float 和 double 。java 的浮点类型都依据 IEEE 754 标准。IEEE 754 定义了32 位和 64 位双精度两种浮点二进制小数标准。 IEEE 754 用科学记数法以底数为 2 的小数来表示浮点数。32 位浮点数用 1 位表示数字的符号,用 8 位来表示指数,用 23 位来表示尾数,即小数部分。

C语言 怎样将无符号整型转换成浮点型
答:C语言中无符号整型转换成浮点型方法如下:unsigned int x=123;1、输出强制转换,如:printf("%f", x ); //这样的输出因为%f与x的类型不同,导致输出数据异常 printf("%f", (float)x ); //强制转换成浮点型,可正确输出 2、存储到相应的变量中,如:float fVal;fVal=x ; //系统会隐式...

求解下列C语言程序运算结果中b中最后的数65535是怎么算出来的,还有-1...
答:一、-1在计算机中以补码形式存储,在16位的编译系统中,-1的补码是1111111111111111;在32位的编译系统中,-1的补码是11111111111111111111111111111111;根据运行结果,你是情况属于16编译系统;二、-1的补码1111111111111111以无符号整数%u输出就是65535。即(65535)10=(1111111111111111)2。

C语言中:字符型*(乘)整数型=什么型?;字符型+(加)浮点型=什么型?;double...
答:C语言里,字符型只不过是一种范围较小的int型,所以计算时按照从范围从小到大的顺序进行类型转换,也就是说 char * int = int char + float = float 至于 double - float ,按相同的原则,先自动把float转换为double型,然后再做减法。

C语言怎么对浮点型的数求余?
答:这样:float a=3.14 ,b=3;int c;a*=100;b*=100;c=(int)a%(int)b;a=(float)c/100;只能用于整形,不能用于浮点,如果浮点定义,必然报错,结果应该是0,不可能是0.14,int=3.14系统默认为3 3%3=0,想得到0.14可以借助系统函数。