关于运算符的一些总结:
1.一个数和自己做异或的结果是0.如果需要常数零,X86平台可能会生成这样的指令:xor1 %eax,%eax.闭关eax寄存器之前存的什么值,做异或运算都能得到零。这条指令的比mov $0 %eax指令快。
2.从异或的真值表中可以看出,不管是0或者1,和0做异或值不变,和1做异或得到原值的相反值。可以利用这个特性与掩码配合实现某位的翻转。
例如:
unsigned int a,b,mask = 1 << 6;
a = 0x12345678;
b = a ^ mask;
3.如果a1^a2^a3^...an的结果是1,则表示a1,a2...an中1的个数为奇数个,否则为偶数个。这条性质可以用来做奇偶校验。
4.x^x^y=y。因为x^x=0,而0^y=y。这条性质可以用来实现不借助任何额外的存储空间实现两数的交换。实现如下:
a = a ^ b;
b = a ^ b;
a = a ^ b;
5.sizeof是一个很特殊的运算符,它有两种形式:sizeof 表达式,sizeof(类型)。
例如:用sizeof运算符求数组的长度
int a[10];
int length = sizeof a/sizeof(int);