我有一个vector<int> table
和一个int index=-833099133
写作时
cout<<table.size()<<endl;
cout<< index%table.size()<<endl;
它给了我:
83
81
然而如果我写
cout<<index%83<<endl;
输出结果:
-79
有没有人帮助我为什么会这样?提前谢谢
答案 0 :(得分:2)
table.size()
属于std::vector<int>::size_type
类型,是无符号类型(通常为std::size_t
),但文字83
为{{ 1}}签名。
对有符号和无符号整数执行操作时,已签名的整数将被隐式转换(“提升”)为无符号值。这导致非负数,这是原始值模数为2的幂(使用的功率取决于无符号类型的宽度)。在您的情况下,int
长度为32位,所以
size_t
当然,-833099133 == 3461868163 (mod 2 ^ 32)
为81,而3461868163 % 83
为-79。 (-833099133 % 83
为+4,但在C ++中,-833099133 mod 83
不是模数,而是余数运算符。)
实际上,如果在%
为32位长的系统上运行以下程序:
std::size_t
你会得到相同的结果。