深入理解计算机系统学习笔记
第2章信息的表示和处理–2.1.7C语言中的位级运算–P37
代码
#include<cstdio>
void inplace_swap(int *x,int *y){
//交换值,不需要第三个位置来临时存储另一个值,并没有性能上的优势,仅仅是一个智力游戏。
*y = *x ^ *y;//y=x^y x=x;
*x = *x ^ *y;//x=x^(x^y)=(x^x)^y=0^y=y y=x^y;
*y = *x ^ *y;//y=y^(x^y)=(y^y)^x=0^x=x x=y;
}
void reverse_array(int a[],int cnt){
//反转数组
int first,last;
for(first=0,last=cnt-1;first<last;first++,last--){
inplace_swap(&a[first],&a[last]);
}
}
int main(){
int x,y;
scanf("%d %d",&x,&y);
inplace_swap(&x,&y);
printf("%d %d\n",x,y);
int a[]={1,3,4,6,7,9,8};
for(int i=0;i<7;i++){
printf("%d",a[i]);
if(i!=6){
printf(" ");
}else{
printf("\n");
}
}
reverse_array(a,7);
for(int i=0;i<7;i++){
printf("%d",a[i]);
if(i!=6){
printf(" ");
}else{
printf("\n");
}
}
int c=0x89ABCDEF;
printf("c=%x\n",c);
printf("~c=%x\n",~c);//每位取反
printf("c&0xff=%x\n",c&0xff);//保留最低有效字节,其他位置置0
printf("c^~0xff=%x\n",c^~0xff);//保留最低有效字节,其他字节取反
printf("c|0xff=%x\n",c|0xff);//最低有效字节设置为全1,其他字节保持不变
return 0;
}