12

我目前正在学习C++。我试图使用表达式计算整数的幂:

val=10^1;

10结果不是预期的答案11。我已经通过使用powmath.h 库的函数解决了这个问题,但我想知道为什么这个语句给了我错误的结果。

4

6 回答 6

10

不!你认为这就是力量吗?不要忘记这一点(在 C++ 和一些编程语言中): 在此处输入图像描述

请务必阅读以下内容:


按位异或采用两个长度相等的位模式,并对每对相应位执行逻辑异或运算。如果只有第一位为 1 或只有第二位为 1,则每个位置的结果为 1,但如果均为 0 或均为 1,则为 0。在此我们执行两个位的比较,如果两个位为 1位不同,如果相同则为 0。例如:

    0101 (decimal 5)
XOR 0011 (decimal 3)
  = 0110 (decimal 6)

按位异或可用于反转寄存器中的选定位(也称为切换或翻转)。任何位都可以通过与 1 进行异或来切换。例如,给定位模式 0010(十进制 2),第二和第四位可以通过位模式在第二和第四位包含 1 的位模式进行按位异或来切换:

    0010 (decimal 2)
XOR 1010 (decimal 10)
  = 1000 (decimal 8)

该技术可用于操纵表示布尔状态集的位模式。

资料来源:维基百科

于 2013-11-01T16:47:02.787 回答
7

那是按位异或运算符,而不是幂。二进制:

10 = 1010
 1 = 0001
val= 1011 = 11 in decimal
于 2013-11-01T15:55:18.727 回答
5

在 C 和 C++ 中,10^110 XOR 1,不是10 to the power of 1

于 2013-11-01T15:54:54.803 回答
2

^XOR是C++中的二元运算符:

10 ^ 1 = 

   00001010
^  00000001
=  --------
   00001011 = 11
于 2013-11-01T15:56:18.537 回答
0

因为 ^ 是异或运算符,而不是幂运算符。基本上,因为二进制中 10 的最后一位是 0,所以通过应用 1 的异或,最后一位被转换为 1,因为它与 0 不同。

于 2013-11-01T15:54:59.860 回答
0

因为在 C++ 中没有幂运算符: ^is a XOR.

1010是二进制的1010211000012XOR将它们放在一起给出10112,即1110

如果您想获得 10 n,请使用标题中的pow函数:<cmath>

val=pow(10, 1);
于 2013-11-01T15:55:16.483 回答