在C ++ 20中,是的。
以下是如何[expr.xor]定义它:
给定转换后的操作数x和y的基数2表示形式的系数x i和y i,结果r的基数2表示形式的系数r i为1(如果存在)(但不是)两者的) X 我和ÿ 我是1,否则为0。
并[basic.fundamental]涵盖了以2为基的表示形式的含义:
宽度为N的无符号整数类型的每个值x都有唯一的表示形式x = x 0 2 0 + x 1 2 1 +…+ x N-1 2 N-1,其中每个系数x i为0或1;这称为x的以2为基的表示形式。有符号整数类型的值的以2为基数的表示形式是相应的无符号整数类型的全等值的以2为基数的表示形式。
简而言之,“物理上”的完成方式并不重要:操作必须满足base-2的更抽象的算术概念(无论是否与内存中的位匹配;当然,实际上会匹配),因此XOR是完全定义良好的。
然而,情况并非总是如此。P1236R1引入了该措辞,以使其清晰地知道整数运算的行为方式,并抽象出“位”这种毛茸茸的概念。
在C ++ 11中,我们所知道的是带符号整数必须遵循“使用二进制数字0和1的整数的位置表示形式,其中连续位表示的值是加法的,以1开头,然后乘以连续的2的整数次幂,除了“最高位置的位 ”(脚注49;应注意,这是非规范性的)。
实际上,这为我们提供了大部分途径,但是其中没有具体的措辞[expr.xor]:我们所知道的是“结果是操作数的按位异或功能”。在此关头,是否指的是充分理解的操作实际上取决于您。请注意,您将很难找到关于该操作被允许执行的异议的意见。
所以:
在C ++ 11中,YMMV。