2015-01-03 48 views
0

考虑到我是编译器的32位应用程序(即使它不会改变任何内容),此代码是否安全?原始类型限制安全

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

它打印“0”,但会影响另一个变量的位?比方说,我有一个字节(字符)与以下位,然后我加1:1111 1111(255)。结果是“1 0000 0000”(256),并且CPU只会读取最后8位作为我的变量或者只是重置位序列?

+0

可能重复的[是使用无符号整数溢出良好做法?](http://stackoverflow.com/questions/988588/is-using-unsigned-intens-overflow-good-practice) – Joe

+0

如何在地球上做这个问题与密切的原因有什么关系? –

回答

4

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

无符号整数,声明无符号,应当服从算术模的法律2 Ñ其中n是位在该值表示的数目整数的特定大小。

所以你的问题中的代码需要输出0,如模数算法的要求。

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

+0

是的,我知道,但它只是清楚的位部分。谢谢! :) – Thecheeselover

2

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