基元类型限制安全性

Primitive types limit safety

本文关键字:安全性 类型      更新时间:2023-10-16

考虑到我正在编译器一个 32 位应用程序(即使它不会改变任何东西),这段代码安全吗?

cout << (numeric_limits<unsigned int>::max() + 1) << endl;

它打印"0",但确实影响了另一个变量的一点?假设我有一个包含以下位的字节(char),然后我添加 1:1111 1111 (255)。结果是"1 0000 0000"(256),并且 CPU 只会读取最后 8 位作为我的变量,还是只是重置位序列?

C++标准草案,§3.9.1.4 要求

声明为无符号的无符号整数应遵循算术模 2 n 定律,其中n 是该特定大小整数的值表示中的位数。

因此,按照模算术定律的要求,您的问题中的代码需要输出 0。

请注意,上面提到的规则不适用于char,因为它没有声明unsigned(您需要改用unsigned char)。

无符号整数类型遵循算术模 2^N 定律。在这种情况下,结果将始终为 0,并且不会覆盖其他内存。