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

时间:2016-06-07 09:41:24

标签: c++ g++ g++4.8

输入:

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

输出:

0

编译器:g ++ 4.8.4

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

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

5 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

((10^9)+1) = 4
4 % 4 = 0

%运算符返回除法的余数。例如,4/3 = 0和3作为余数,因此它将返回3,但是4/4 = 1且没有余数,因此它返回0.

答案 2 :(得分:1)

编译器显示正确的答案。

(10^9) = 3

((3) + 1) = 4

4 % (4)= 0

模数(%)运算符返回divison之后的余数。有关模数运算符的教程,请参见this页面。

答案 3 :(得分:1)

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

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

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

  1. ^运算符在C ++中是按位xor。(刚刚意识到你的意见。感谢信息人员。)
  2. %运算符用于整数。所以,我使用了fmod()函数。因为我的计算需要的不仅仅是整数类型。

答案 4 :(得分:0)

  

我不知道为什么编译器打印该值为0.我必须这样做   现在做预期的产出?

(10^9) == 3

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

decimal   binary
10        0110
9         0101


0110 ^ 0101  == 0011

因此:

10^9 == 3

因此:

(10^9) + 1 == 4

4 % ((10^9) + 1) == 0