【发布时间】:2021-05-08 23:16:01
【问题描述】:
正如cppreference 所说,“在 IEEE 754 中,浮点数最常见的二进制表示形式,正无穷大是指数的所有位都被设置并且分数的所有位都被清除的值。”。我试过这个代码 sn-p,但我没有看到指数位设置。我是不是哪里错了?
#include <iostream>
#include <limits>
#include <bitset>
#include <math.h>
using namespace std;
int main() {
float a = 0b00000000000000000000000000000000;
double b = std::numeric_limits<double>::infinity();
bitset<64> x(b);
cout<<x<<endl;
return 0;
}
它在控制台上打印 0000000000000000000000000000000000000000000000000000000000000000。
【问题讨论】:
-
bitset<64> x(b)- 这使用构造函数std::bitset::bitset(unsigned long long)。 -
打开编译器警告。你在这里从
double制作long。我不确定这是否是无限的定义行为。 -
@Thomas:我的编译器警告被调高了,Apple Clang 11.0 没有报告任何警告。
-
嗯,确实!即使使用
-Wall -Wextra -pedantic,gcc 和 clang 也不会对此发出警告。那为什么我记得看到类似“从浮点数制作整数而不进行强制转换”的警告? -
您必须添加
-Wconversion才能看到这些警告。