位运算中的典型应用

常见位运算中的典型应用

  以与,或,异或举例说明。

或运算将某一位置为1
与运算将某一位清零
异或运算将某一位翻转
交换两个数的值
异或运算性质0^n = n(任何数和0异或都是本身)
a ^ b = b ^ a(交换律)
a ^ b ^ c = a ^ (b ^ c)(结合律,可以改变运算顺序)
  1. 或运算 改变某一位,置为1。 方法:将数据与1左移动若干位进行或运算即可。
#include <stdio.h>
#include <stdlib.h>

int main()
{
	//或运算 将某一位置为1。将数据与1左移动进行或运算即可 
	unsigned char a = 0xa2,n = 6; //1010 0010
	a |= (1 << n);
	printf("a = %#x\n",a);        //1110 0010
	return 0;
}

输出结果:

a = 0xe2

原理:将变量a和某个数据按位或运算。
原理图

  1. 与运算 将某一位清零。方法:将数据与1左移动将数据与1左移动取反进行与运算。
#include <stdio.h>
#include <stdlib.h>

int main()
{
	//与运算 清除某一位(清零)  将数据与1左移动取反进行与运算 
	unsigned char a = 0xa4, n = 2;
	a &= ~(1<<2);
	printf("a = %#x\n",a); 
	return 0;
}

输出结果:

a = 0xa0

原理:将变量a和某个数据取反之后按位与运算。
原理图

  1. 异或运算
    (1)将某一位翻转 方法:将数据和1左移动异或运算。
#include <stdio.h>
#include <stdlib.h>

int main()
{
	//异或运算 按位翻转(将某位取反) 将数据和1左移动异或运算 
	unsigned char a = 0xa4, n = 2;
	a ^= (1<<2);
	printf("a = %#x\n",a); 
	return 0;
}

输出结果:

a = 0xa0

原理:将数据和1做移动异或运算。
原理图
(2)交换两个数

#include <stdio.h>
#include <stdlib.h>

int main()
{
	//异或操作 交换两个数 
	int a = 10, b = 20;
	printf("before:a = %d,b = %d\n",a,b);
	a = a ^ b;  
	b = a ^ b;
	a = a ^ b;
	printf("after:a = %d,b = %d\n",a,b);
	return 0;
}

输出结果:

before:a = 10,b = 20
after:a = 20,b = 10
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值