C++ 在地板函数之后以十六进制打印数字
c++ print number in hexadecimal right after floor function
我注意到 c++ 中有一些我不明白的奇怪行为, 我正在尝试以十六进制表示形式打印截断的双精度
此代码输出为17,是十进制表示形式
double a = 17.123;
cout << hex << floor(a) << 'n';
虽然这个代码输出是11,也是我想要的输出
double a = 17.123;
long long aASll = floor(a);
cout << hex << aASll << 'n';
由于双精度可以获得非常大的数字,我担心在将截断的数字存储在长长变量中时会出现错误的输出,有什么建议或改进吗?
引用 CPPreference 的文档页面供std::hex
(和朋友)使用
修改整数 I/O 的默认数字基数。
这表明std::hex
对浮点输入没有任何影响。你会得到的最好的是
cout << hex << static_cast<long long>(floor(a)) << 'n';
或执行相同操作的函数。
如果值始终为正数,则<cstdint>
中的uintmax_t
对于获取最大可用整数可能很有用。毕竟,什么是负十六进制数?
由于double
值很容易超过可用整数的最大分辨率,因此这不会涵盖整个范围。如果地板值超过整数类型可以容纳的值,则必须手动进行转换或使用大的整数库。
旁注:std::hexfloat
做了一些非常不同的事情,并且由于当前标准中的一些措辞不佳,因此无法在所有编译器中正常工作,该标准已被敲定,应在下一次修订中更正。
只需编写您自己的 floor 版本并让它返回一个整数值。 例如:
long long floorAsLongLong(double d)
{
return (long long)floor(d);
}
int main() {
double a = 17.123;
cout << hex << floorAsLongLong(a) << endl;
}
相关文章:
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 打印十六进制字符
- 编译器始终打印十六进制/八进制数字
- 在 c++ 中以十六进制格式打印无符号字符(BYTE).使用 std::cout
- 以十六进制打印出 DWORD 会在 win32 c++ 中返回0x7FFFFFFF
- 将长整型值打印为带有前导零的十六进制
- C++ 在地板函数之后以十六进制打印数字
- 如何使系统在十六进制数之前打印 0x,在八进制数之前打印 0?
- 打印出浮点数的内部十六进制
- 为什么 std::hex 没有特别用字符打印为十六进制?
- 我如何在GDB中打印十六进制的双重位
- C/C++ 以十六进制打印字节,得到奇怪的十六进制值
- 尝试将二进制数组转换为十六进制C++然后打印结果
- 如何从uint32_t打印十六进制
- 用IO操纵器在十六进制中打印一个8位号码
- 将内存地址中的值打印为十六进制C++
- fprintf:打印文字十六进制字符串
- 将十六进制转换为可打印的字符串/字符
- 以十六进制打印数据结构值