繁体   English   中英

std::uint8_t(-1) 与 std::uint8_t(0xffu) 的差异和细微差别

[英]Difference and nuances of std::uint8_t(-1) vs std::uint8_t(0xffu)

例如,我在这里看到了使用std::uint8_t(-1)

https://en.cppreference.com/w/cpp/language/fold

CPP 参考说明了字节顺序交换,我想知道与std::uint8_t(0xffu)相比有什么区别?

在 x86 上似乎没有任何区别: https://godbolt.org/z/Kb7v8K1nT

我的问题可能是阅读过多,这只是某人编写代码的惯例,没有更深层次的含义。 但是,我怀疑这是由于代码在CHAR_BIT != 8的一些深奥架构上的可移植性

但是后来我想知道在需要8位对齐的字节顺序交换的情况下,我希望std::uint8_t(0xffu)并即使在CHAR_BIT != 8时也强制执行 8 位计算,那将生成更多可移植代码,因为预计不会在平台之间更改? 例如,当我生成 TCP/IP 数据包并且需要具有特定的字节顺序(并且可能交换一些值)时,无论使用什么底层架构,它们都需要相同的值。

也许在一个半字节,字符交换(我们期望类型的大小改变和机制调整的地方)那么std::uint8_t(-1)会更好?

本质上,对于std::uint8_t(-1) ,我们说无论有多少位都将所有位设置为高(如果 CHAR_BIT > 8 则更多),而对于std::uint8_t(0xffu) ,我们想要设置 8 位(如果 CHAR_BIT < 8) 我们得到的更少?

还是我完全错过了什么?

这是获得无符号类型最大值的捷径,而不必关心它的宽度。 所有无符号类型都以模 2 n运行,因此unsigned_type(-1)std::numeric_limits<unsigned_type>::max()相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM