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

标签 c floating-point processor

<分区>

最近遇到一个程序:

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。这是小数点的默认行为。 double 据类型的精度是 float 的两倍。 在您的代码中,如果您将 if 条件替换为:

if(a < 0.7f)


结果会不一样。你的程序将给出输出 那就“不”。另一种交叉检查的方法是以下代码行:

printf("%d", sizeof(0.7));
printf("%d", sizeof(a));


在这种情况下,输出将是8 和 4(这可能会有所不同)。 谈到你的问题,它们都没有在 main 中存储为 0.7 寄存器的内存但是, double 据类型的十进制更多 接近于 0.7

关于处理器的代码解释和十进制比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45851349/

相关文章:

c - htonl() 是否更改 BIG ENDIAN 机器上的字节顺序?

Python:带三角函数的小数

python - 如何将字符串解析为 float 或 int?

java - Java中的Float.valueOf(String arg)四舍五入问题

c++ - 运行时检测系统架构 (x86/x64)

x86 - 调用门、中断门、陷阱门的区别?

c - 如何在 c 中使用 % 运算符作为浮点值

c - 在 C 中添加二维矩阵

caching - Meltdown 和 Spectre 之间有什么区别?

c++ - 从 C/C++ 程序生成内联核心转储