这段代码是什么意思?
int possible = 1;
for (int i = 0; i < n - 1; ++i){
possible += (n_size[i] ^ n_size[i + 1]) < 0;
}
我认为这是^
XOR,但它在这段代码中是如何工作的?这很奇怪,
因为我认为当我们使用XOR时我们只有0或1。 请帮助我理解。
答案 0 :(得分:1)
让我们看看这一行:
possible += (n_size[i] ^ n_size[i + 1]) < 0;
我们不了解n_size
,但我认为它是n
int
的数组。因此,我们对n_size
的两个连续项进行XOR(按位),并确定结果的符号(通过将其与0进行比较)。
Bitwise-XOR是每位操作位,因此(ABCD = 1011 ^ 0101
&lt; =&gt; A = 1 ^ 0
,B = 0 ^ 1
,C = 1 ^ 0
,D = 1 ^ 1
)。< / p>
int
以某种方式进行编码,这样我们就可以获得具有最高有效位的符号(数字为0bX???????
,如果X = 1,则数字为负数,否则为数字是积极的。)
因此(A ^ B) < 0
相当于(A < 0) ^ (B < 0)
。
当两个连续的词语符号不同时,此行会增加possible
。
最后,possible
计算连续符号的数量。
PS:请注意float
和double
的符号也是由最重要的位确定的,所以如果n_size
是{{1}的数组,它的工作原理相同}或float
。
答案 1 :(得分:0)
由于coderedoc的评论有点简短:^
是一个逐位运算符,就像|
和&
一样。在两个变量中,这些运算符应用于每对相应的位(对于这样的一对,你理解的是XOR):
unsigned char c1 = 0b11001010;
unsigned char c2 = 0b10101100;
unsigned char c3 = c1 ^ c2; // == 0b01100110
unsigned char c4 = c1 & c2; // == 0b11101110
unsigned char c5 = c1 | c2; // == 0b10001000