连接两个双变量

XORing two double variables

本文关键字:两个 变量 连接      更新时间:2023-10-16

我写了两行:

第一行:

int a;
a=a^a;

第二行:

double d;
d=d^d;

第1行工作正常,但第2行给我错误:

error: invalid operands of types ‘double’ and ‘double’ to binary ‘operator^’

有人能告诉我为什么位的异或运算符在两个int上工作,但在两个变量上不起作用…?

似乎是一个愚蠢的怀疑…但是如果没有这个,我真的无法完成我的课程!

因为标准是这么说的。

c++ 11§5.12位异或运算符

执行通常的算术转换;结果是操作数的按位异或函数。操作符仅适用于整型或枚举操作数。

在我看来,两个double没有多大意义。

我认为其他答案很好地解释了为什么默认情况下不支持它。您可能不应该这样做,但是您可以这样做:

    double d = 12345.6789;
    unsigned long long* uPtr = (unsigned long long*)&d;
    unsigned long long uXor = (*uPtr) ^ (*uPtr);
    double dXor = *((double*)&uXor);

因为异或,像其他布尔位运算符一样,是为二进制操作定义的,例如0b10^0b01 = 0b11,但对于表示与值不同的任何东西都没有意义。如果您对4.01.0进行异或,您应该得到值的异或,即5.0或表示的位异或。如果是前者,你该如何处理精度没有完全重叠的值?'1.89e92 and 0.01 ' ?而后者甚至很难定义(并且可能没有意义),因为c++标准没有确切定义双精度类型的表示方式,并且在计算和存储期间可能会以不同的方式表示。