原始类型限制了安全性

时间:2015-01-03 01:25:57

标签: c++ primitive-types

考虑到我是一个32位应用程序的编译器(即使它没有改变任何东西),这段代码是否安全?

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

它打印“0”但确实影响了另一个变量的一些?假设我有一个带有以下位的字节(字符),然后我加1:1111 1111(255)。结果是“1 0000 0000”(256)并且cpu只读取最后8位作为我的变量或者只是重置位序列?

2 个答案:

答案 0 :(得分:4)

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

  

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

因此,根据模运算定律的要求,您的问题中的代码需要输出0。

请注意,上述规则不适用于char,因为它未声明为unsigned(您需要使用unsigned char代替)。

答案 1 :(得分:2)

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