位操作计算规则以及用途

本文介绍了位操作的基本概念,包括按位与、按位或、按位异或、位移以及位取反的运算规则和实际用途。按位与常用于数位屏蔽,按位或用于定向修改数位,位移可实现快速乘除2,位取反在获取反码时有用,而按位异或则在对称加密和无额外变量的数值交换中发挥作用。
摘要由CSDN通过智能技术生成

位操作列表

符号中文名英文
&按位与bitwise AND
|按位或Bitwise OR
^按位异或Bitwise XOR
<<按位左移Shift Left
>>按位右移Shift Right
~按位取反Bitwise NOT

所有位运算的规则

低位:靠后的位
高位:靠前的位
低位对齐,高位补0, 对每一位分别执行计算规则(下文说)

00 10 11 10 (运算数1)
00 00 00 11 (运算数2)
-----------------------------------------
00 00 00 10 (运算结果)

一、按位与

1.计算规则

0 & 0 = 0;

0 & 1 = 0;

1 & 1 = 1;

不同大小的数据位操作的原则,低位对齐,高位补零

2.用途

可用作数位屏蔽

00 10 11 10 (运算数1)
00 00 00 11 (屏蔽遮罩)

00 00 00 10 (屏蔽结果)

屏蔽除了最后两位以外的其他位

二、按位或

1.运算规则

1 | 1 = 1
1 | 0 = 1
0 | 0 = 0

一个是1就是1

2.用途

定向修改数位为1

10 00 01 10 (运算数1)
00 00 00 01 (遮罩)
10 00 01 11 (结果)

三、按位移动

1.运算规则

原则是高位舍弃,低位补零。
符号位不参与计算!!!!没有溢出检查!!

计算 2<<2的结果如下,右移同理

00 00 00 10 (运算数1)
00 00 10 00 (左移2位结果)

a << k = a * 2k
a >> k = a * 2(-k)

四、按位取反

1.运算规则

让每一位0变1,1变0

~1 = 0
~0 = 1

2.用途

取反的一个用途可以是获取补码反码等,笔者并不知道太现实的用途

五、按位异或

1.运算规则

不同为1,相同为0

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

2.用途

1.对称加密

#include<stdio.h>

int main()
{
	int a = 1000;
	int key = 95689792966;
	//每两次运算回到原样
	a = a ^ key;
	printf("按Key加密结果:%d\n",a);
	a = a ^ key;
	printf("按Key解密结果:%d\n",a);

}

请添加图片描述

两次就回到正常

2.交换数值

#include<stdio.h>

int main()
{
	int a = 30;
	int b = 50;
	printf("a=%d  b=%d\n", a, b);
	//交换过程
	//a = (a^b)
	// b = b^(a^b) = a
	// a = (a^b)^a
	a^=b;
	b^=a;
	a^=b;
	
	printf("a=%d  b=%d\n", a, b);
	return 0;
}

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUE ZHEN PENG

码字不易,如果你想请我喝杯果汁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值