正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位加1 反码是:符号位为1,其余各位求反,但末位不加1 也就是说,反码末位加上1就是补码 1100110011 原 1011001100 反 除符号位,按位取反 1011001101 补 除符号位,按位取反再加1
<<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。
>>,有符号右移位,将运算数的二进制整体右移指定位数,整数高位用0补齐,负数高位用1补齐(保持负数符号不变)。 >>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。例如: var temp temp = -14 >>> 2 变量 temp 的值为 -14 (即二进制 / 的 11111111 11111111 11111111 11110010), 向右移两位后等于 1073741820 (即二进制的 00111111 11111111 11111111 11111100)。
1、用&判断奇数还是偶数
//因为设x为二进制最后一位,如果是奇数则为1;偶数则为0. #include<stdio.h> int main() { int a; scanf("%d",&a); if(a&1) { printf("奇"); }else { printf("偶"); } }2、用异或交换两个数的数值
//连续^三次即可 #include<stdio.h> int main() { int a,b; scanf("%d",&a); scanf("%d",&b); a=a^b; b=a^b; a=a^b; printf("a=%d,b=%d",a,b); }