处理器的代码解释和十进制比较

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