C++ 这是什么C++;使用运算符^编码?

C++ 这是什么C++;使用运算符^编码?,c++,C++,这个代码是什么意思 int possible = 1; for (int i = 0; i < n - 1; ++i){ possible += (n_size[i] ^ n_size[i + 1]) < 0; } int可能=1; 对于(int i=0;i

这个代码是什么意思

int possible = 1;
for (int i = 0; i < n - 1; ++i){
   possible += (n_size[i] ^ n_size[i + 1]) < 0;
}
int可能=1;
对于(int i=0;i
我认为这是异或,但它在这段代码中是如何工作的?真奇怪

因为我认为当我们使用XOR时,我们只有0或1。 请帮助我理解。

让我们看看这一行:

possible += (n_size[i] ^ n_size[i + 1]) < 0;
可能+=(n_size[i]^n_size[i+1])<0;
我们不知道
n\u size
,但我假设它是一个
n
int
数组。因此,我们对两个连续的
n_size
项进行异或(按位),并确定结果的符号(通过将其与0进行比较)

按位异或是每一位的运算位,所以(
ABCD=1011^0101
A=1^0
B=0^1
C=1^0
D=1^1

int
以某种方式编码,这允许我们获得具有最高有效位的符号(在数字
0bX????
中,如果X=1,数字为负数,否则数字为正数)

所以
(A^B)<0
相当于
(A<0)^(B<0)

因此,当两个连续项的符号不相同时,这一行递增
可能

最后,
可能
计算改变符号的连续术语的数量


PS:注意,
float
double
的符号也由它们的最高有效位决定,因此如果
n_size
是一个
float
double
的数组,则其工作原理相同,因为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

按位异或…不…你想错了..
100^11=111
既不
0
也不
1
你在哪里找到的?我不明白。只有当只有异或的一个操作数设置了负符号位时,该表达式才会小于零。这有什么用?@斑马鱼你刚才真的解释了它的use@Brian考虑读取一个@ PASER,因此它计算数组中的任意两个连续值具有不同的符号位的次数吗?这个有用吗?你在哪里找到的?这就是我一直在寻找的,当连续两个学期都没有某种迹象时,“可能”的增量。那么,我能理解这一点吗?我想说,“如果(连续不是某个符号),那么递增-否则(什么也不做)。这是一种理解方法吗?@Brian是的,因为true=1,false=0,所以“可能+=布尔”的意思是:“如果(布尔)可能++;"