处理器的代码解释和十进制比较
Code explanation and decimal comparison by processors
最近遇到一个程序:
float a = 0.7;
if(a < 0.7)
printf("Yes");
else
printf("No");
我理解代码如何打印是。但是,不等式右边的 0.7 不一样吗? 'a'和'0.7'在内存中的二进制值会不会相同?
为什么0.7,用作0.7但变量'a'的值小于0.7 , 因为没有明确的二进制表示 0.7?
很高兴您对这个项目有了更进一步的思考。
实际上,您得到的结果是由于数据类型的变化
变量 'a' 和 '0.7' 的值。
变量'a'是数据类型float,而'0.7'是数据类型
输入 double。这是小数点的默认行为。
双精度数据类型的精度是浮点数的 两倍。
在您的代码中,如果您将 if 条件替换为:
if(a < 0.7f)
结果会不一样。你的程序将给出输出
"No" 那么。另一种交叉检查的方法是以下代码行:
printf("%d", sizeof(0.7));
printf("%d", sizeof(a));
在这种情况下,输出将是 8 和 4(这可能会有所不同)。
谈到你的问题,其中 none 在 main 中存储为 0.7
寄存器的内存但是,双精度数据类型的十进制更多
接近于 0.7
最近遇到一个程序:
float a = 0.7;
if(a < 0.7)
printf("Yes");
else
printf("No");
我理解代码如何打印是。但是,不等式右边的 0.7 不一样吗? 'a'和'0.7'在内存中的二进制值会不会相同?
为什么0.7,用作0.7但变量'a'的值小于0.7 , 因为没有明确的二进制表示 0.7?
很高兴您对这个项目有了更进一步的思考。
实际上,您得到的结果是由于数据类型的变化
变量 'a' 和 '0.7' 的值。
变量'a'是数据类型float,而'0.7'是数据类型
输入 double。这是小数点的默认行为。
双精度数据类型的精度是浮点数的 两倍。
在您的代码中,如果您将 if 条件替换为:
if(a < 0.7f)
结果会不一样。你的程序将给出输出
"No" 那么。另一种交叉检查的方法是以下代码行:
printf("%d", sizeof(0.7));
printf("%d", sizeof(a));
在这种情况下,输出将是 8 和 4(这可能会有所不同)。
谈到你的问题,其中 none 在 main 中存储为 0.7
寄存器的内存但是,双精度数据类型的十进制更多
接近于 0.7