为什么编译器打印的值为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().
- ^ 运算符在 C++ 中是按位异或。(根据您的评论,现在才意识到。感谢您提供的信息)。
- % 运算符用于整数。 所以,我使用了 fmod() 函数。因为我的计算需要的不仅仅是整数类型。
输入:
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().
- ^ 运算符在 C++ 中是按位异或。(根据您的评论,现在才意识到。感谢您提供的信息)。
- % 运算符用于整数。 所以,我使用了 fmod() 函数。因为我的计算需要的不仅仅是整数类型。