lq1.2如何找数组中成对的那个数

tech2022-07-15  141

正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为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); }

正题

//a^a=0;a^0=a #include <stdio.h> int main() { int a[11]={0,1,2,3,4,5,6,7,8,9,0}; scanf("%d",&a[10]); int b=a[0]; //先把数组中的元素异或一遍 for(int i=1;i<11;i++) { b=b^a[i]; } //再把数组中出现的元素异或一遍 int c=b^0^1^2^3^4^5^6^7^8^9; printf("%d",c); }
最新回复(0)