两个二进制数异或结果是什么呢?
两个二进制数异或结果是这两个二进制数差的绝对值,即表达为如下:
a^b = |a-b| (按位相减取绝对值,再按位累加)
解答过程:
二进制数a与b异或,即a和b两个数按位进行,如果对应位相同,即为0(这个时候相当于对应位算术相减),如果不相同,即为1(这个时候相当于对应位算术相减的绝对值)。由于二进制每个位只有两种状态,要么是0,要么是1,则按位异或操作可以表达为按位相减取绝对值,再按位累加。
如何利用指针实现两个数据的交换?
#include <stdio.h>
void foo(int *a,int *b)
{
*a=*a+*b;printf("*a=%d\t",*a);
*b=*a-*b;printf("*b=%d\t",*b);
*a=*a-*b;printf("*a=%d\t",*a);
}
int main()
{
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
int a=1,b=5,c=9;
printf("%d %d %d\n",a,b,c);
foo(&a,&b);
printf("%d %d %d\n",a,b,c);
foo(&b,&c);
printf("%d %d %d\n",a,b,c);
foo(&c,&a);
printf("%d %d %d\n",a,b,c);
printf("Hello, World! \n");
int a1=1,a2=2,a3=3,a4=4,a5=5;
printf("%d %d %d %d %d\n",a1,a2,a3,a4,a5);
foo(&a1,&a5);
printf("%d %d %d %d %d\n",a1,a2,a3,a4,a5);
foo(&a2,&a3);
printf("%d %d %d %d %d\n",a1,a2,a3,a4,a5);
foo(&a3,&a5);
printf("%d %d %d %d %d\n",a1,a2,a3,a4,a5);
return 0;
}