产生十六进制值的整数错误

integer producing hex values error

本文关键字:整数 错误 十六进制      更新时间:2023-10-16

我的程序发生了一些奇怪的事情。我目前在我的程序中使用了很多线程,不可能将所有内容都粘贴到这里。

然而,这是我的问题:

int value = 1000;
std::cout << value << std::endl;
//output:  3e8

知道为什么我的输出是3e8吗?

修复它以打印十进制值的命令是什么?

提前感谢!:)

其他线程将std::cout流的默认输出基数更改为十六进制。请注意,100010=3e816,即1000 == 0x3e8

在程序中的某个位置调用,例如:

std::cout << std::hex << value;

已使用。要将输出恢复为正常(十进制),请使用:

std::cout << std::dec;

这里有一个相关的链接,指向在std::cout上输出数字的不同方式。

此外,正如下面的评论所指出的,安全修改cout标志的标准方法如下:

ios::fmtflags cout_flag_backup(cout.flags()); // store the current cout flags
cout.flags ( ios::hex ); // change the flags to what you want
cout.flags(cout_flag_backup); // restore cout to its original state

链接到IO基本标志


正如下面的评论所述,明智的做法是指出,在使用IO流时,最好在线程和流之间进行某种形式的同步,即确保没有两个线程可以同时使用同一个流
这样做可能还会集中流调用,这意味着将来调试这样的东西会容易得多
这是一个SO问题,可能会帮助您

可能是另一个线程在cout上将输出更改为十六进制。我怀疑这些流是否是线程安全的。

相关文章: