-2

输入 :

cout << (4 % ((10^9)+1) );

输出 :

0

编译器:g++ 4.8.4

我不知道为什么编译器打印该值是 0。我现在必须做什么才能获得预期的输出?

打印输出的正确代码是什么?

4

5 回答 5

4

^是按位异或运算,而不是指数运算。10 ^ 9 是 3。

所以4 % ((10 ^ 9) + 1)= 4 % (3 + 1)= 4 % 4= 0。编译器是正确的。

您的意思是std::pow(10L, 9L),注意不要溢出整数类型吗?那么答案是 4(尽管您必须将返回值std::pow转换为运算符的适当整数类型%)。

于 2016-06-07T09:44:29.603 回答
1

编译器显示正确答案。

(10^9) = 3

((3) + 1) = 4

4 % (4)= 0

模数 (%) 运算符返回除法后的余数。有关模数运算符的教程,请参阅页面。

于 2016-06-07T09:50:35.013 回答
1
((10^9)+1) = 4
4 % 4 = 0

% 运算符返回除法的余数。例如,4/3 = 0 和 3 作为余数,所以它会返回 3,但 4/4 = 1 并且没有余数,所以它返回 0。

于 2016-06-07T09:47:50.350 回答
1

谢谢你解释这个逻辑。在您的帮助下,我已经理解了这个逻辑,这是我解决的这个逻辑的解决方案。

cout << (4 % ((10^9)+1) );   ==>  cout <<fmod(5, (pow(10,9)+1));

我的错误是使用^ 而不是 pow()% 而不是 fmod()

  1. ^ 运算符在 C++ 中是按位异或。(刚刚意识到您的评论。感谢您提供的信息)。
  2. % 运算符用于整数。所以,我使用了fmod()函数。因为我的计算需要的不仅仅是整数类型。
于 2016-06-07T10:28:17.683 回答
0

我不知道为什么编译器打印该值是 0。我现在必须做什么才能获得预期的输出?

(10^9) == 3

^运算符在 C++ 中是按位异或。也就是说,在二进制

decimal   binary
10        0110
9         0101


0110 ^ 0101  == 0011

因此:

10^9 == 3

最后:

(10^9) + 1 == 4

4 % ((10^9) + 1) == 0
于 2016-06-07T09:47:19.243 回答