考虑到我是一个32位应用程序的编译器(即使它没有改变任何东西),这段代码是否安全?
cout << (numeric_limits<unsigned int>::max() + 1) << endl;
它打印“0”但确实影响了另一个变量的一些?假设我有一个带有以下位的字节(字符),然后我加1:1111 1111(255)。结果是“1 0000 0000”(256)并且cpu只读取最后8位作为我的变量或者只是重置位序列?
答案 0 :(得分:4)
C ++标准草案,§3.9.1.4要求
无符号整数,声明为无符号整数,应遵守算术模2 n 的定律,其中n是该特定整数大小的值表示中的位数。
因此,根据模运算定律的要求,您的问题中的代码需要输出0。
请注意,上述规则不适用于char
,因为它未声明为unsigned
(您需要使用unsigned char
代替)。
答案 1 :(得分:2)
无符号整数类型遵循算术模2 ^ N的算法。在这种情况下的结果将始终为0,并且不会覆盖其他内存。