#include <iostream>
#include <cstring> // for memcpy
#include <cstdint> // for uint32_t
#include <bitset>
using namespace std;
uint8_t extractExponent(float value) {
uint32_t intRepresentation;
memcpy(&intRepresentation, &value, sizeof(float));
// 提取指数位
uint8_t exponent = (intRepresentation >> 23) & 0xFF;
cout << bitset<32>(intRepresentation) << "dddd" << endl;
return exponent; // 返回提取的指数
}
int main() {
float number = 33; // 示例浮点数
// cout << "number is: " << bitset<sizeof(float) * 8>(number) << endl;
// 这样写是不对的,因为bitset需要的是一个整型,而传入的是一个float,这会导致std::bitset尝试将float先转换为int
// 所以3.14的话,会先自动转成3,然后再输出3的机器数
// 输出浮点数的二进制机器码
uint32_t bits;
memcpy(&bits, &number, sizeof(float));
cout << "number is: " << bitset<32>(bits)<< endl;
// 输出浮点数的阶码真值(移码-127)
uint8_t exponent = extractExponent(number);
cout << "Exponent of " << number << " is: " << bitset<8>(exponent) << ", " << static_cast<int>(exponent)-127 << endl;
return 0;
}
输出浮点数的二进制机器码并提取出指数位、输出阶码真值
最新推荐文章于 2024-10-10 22:59:02 发布