为什么编译器打印的值为0?如何在编码中实现这个逻辑?

why the compiler printing the value is 0? How to implement this logic in coding?

输入:

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

输出:

0

编译器:g++ 4.8.4

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

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

^是按位异或运算,不是求幂。 10 ^ 9 是 3.

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

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

I don't know why the compiler printing the value is 0. What i have to do now for expected output?

(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
((10^9)+1) = 4
4 % 4 = 0

% 运算符 return 是除法的余数。例如,4/3 = 0 和 3 作为余数,所以它将 return 3,但是 4/4 = 1 并且没有余数,所以它 returns 0.

编译器显示正确答案。

(10^9) = 3

((3) + 1) = 4

4 % (4)= 0

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

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

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

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

  1. ^ 运算符在 C++ 中是按位异或。(根据您的评论,现在才意识到。感谢您提供的信息)。
  2. % 运算符用于整数。 所以,我使用了 fmod() 函数。因为我的计算需要的不仅仅是整数类型。