初出茅庐的小李第51篇博客之C语言杂记

两个二进制数异或结果是什么呢?

两个二进制数异或结果是这两个二进制数差的绝对值,即表达为如下:
a^b = |a-b| (按位相减取绝对值,再按位累加)
解答过程:
二进制数a与b异或,即a和b两个数按位进行,如果对应位相同,即为0(这个时候相当于对应位算术相减),如果不相同,即为1(这个时候相当于对应位算术相减的绝对值)。由于二进制每个位只有两种状态,要么是0,要么是1,则按位异或操作可以表达为按位相减取绝对值,再按位累加。

如何利用指针实现两个数据的交换?

#include 
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;
}

初出茅庐的小李第51篇博客之C语言杂记_第1张图片

你可能感兴趣的:(笔记,C,c语言)