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

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

两个二进制数异或结果是这两个二进制数差的绝对值,即表达为如下:
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;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值