C 语言 ^ 及 & 两个示例
C 语言中通过运算符异或 ^ 来交换两个数的值,而且不引入其他变量。
#include "stdio.h"
int main(){
int a=45, b=30;
printf("原数据是a=%d, b=%d", a, b);
a = a^b;
b = a^b; /*b1 = (a^b)^b*/
a = a^b; /*a1 = (a^b)^((a^b)^b)*/
printf("交换后a=%d, b=%d\n", a, b);
}
输出结果:
原数据a=45,b=30
交换后a=30,b=45
手算:
a = 45 = 0b101101
b = 30 = 0b11110
a = a^b = 0b101101^0b011110 = 0b110011
b = a^b = 0b110011^0b11110 = 0b101101 = 45
a = a^b = 0b110011^0b101101 = 0b11110 = 30
利用位与 & 运算,判断一个整数是否是 2 的整数次幂。
#include "stdio.h"
int judge(int num){
if( ( num>0 ) && ( (num&(num-1) ) == 0)){
printf("%d是2的整幂次方。\n", num);
}
else{
printf("%d不是2的整幂次方。\n", num);
}
return 0;
}
int main(){
judge(100);
judge(64);
judge(33);
judge(16);
return 0;
}
输出结果:
100不是2的整幂次方。
64是2的整幂次方。
33不是2的整幂次方。
16是2的整幂次方。