为什么10 ^ 1是11?

时间:2013-11-01 15:53:28

标签: c++ math caret

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

val=10^1;

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

6 个答案:

答案 0 :(得分:10)

没有!你认为那是力量吗?别忘了这个(用C ++和一些编程语言): enter image description here

请务必阅读:


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

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

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

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

此技术可用于处理表示布尔状态集的位模式。

来源:维基百科

答案 1 :(得分:8)

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

10 = 1010
 1 = 0001
val= 1011 = 11 in decimal

答案 2 :(得分:5)

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

答案 3 :(得分:2)

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

10 10 是二进制的1010 2 ; 1 10 0001 2 XOR将它们放在一起会1011 2 ,即11 10

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

val=pow(10, 1);

答案 4 :(得分:2)

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

10 ^ 1 = 

   00001010
^  00000001
=  --------
   00001011 = 11

答案 5 :(得分:1)

因为^是排他或运算符而不是取幂运算符。基本上,因为二进制10的最后一位是0,通过应用exclusive或1,最后一位被转换为1,因为它不同于0.