在负整数和 std::size_t 之间使用模运算符时的奇怪行为
Weird behaviour when using the modulo operator between a negative int and std::size_t
这段代码片段:
#include <iostream>
#include <cstddef>
int main()
{
int a{-4};
std::size_t b{3};
std::cout << a % b;
return 0;
}
打印
0
而这段代码片段:
#include <iostream>
int main()
{
int a{-4};
int b{3};
std::cout << a % b;
return 0;
}
打印
-1
那么,为什么第一个代码片段 returns 0
?为什么将 b
从 std::size_t
更改为 int
打印出正确的结果?
哦,这是因为 a
隐式转换为 std::size_t
因为 b
是 std::size_t
,也就是 4294967292
(在我的机器上),并且 4294967292 % 3 == 0
这段代码片段:
#include <iostream>
#include <cstddef>
int main()
{
int a{-4};
std::size_t b{3};
std::cout << a % b;
return 0;
}
打印
0
而这段代码片段:
#include <iostream>
int main()
{
int a{-4};
int b{3};
std::cout << a % b;
return 0;
}
打印
-1
那么,为什么第一个代码片段 returns 0
?为什么将 b
从 std::size_t
更改为 int
打印出正确的结果?
哦,这是因为 a
隐式转换为 std::size_t
因为 b
是 std::size_t
,也就是 4294967292
(在我的机器上),并且 4294967292 % 3 == 0