C语言中位运算符

    & 与运算 都是1才为1

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
1100 & 1010 = 1000

   !或运算 有1为1

1100 | 1010 = 1110

    ~ 取反 1变0 0变1

~1100 = 0011

    ^ 异或  相同为0 不同为1

1100 ^ 1010 = 0110

     << 左移 左移补0 移动几位右侧补几个0

 char a = 3; // 二进制表示为 00000011 
 char result = a << 2; // 左移2位
计算过程:

00000011 << 2 = 00001100

结果:

result = 12 // 十进制 1

 

   >> 右移 右移补符号位

右移运算会将位向右移动指定的位数,左边用符号位(对于有符号类型)或0(对于无符号类型)补齐。每右移一位,相当于除以2。

示例 1:无符号右移
unsigned char a = 12; // 二进制表示为 00001100
unsigned char result = a >> 2; // 右移2位
计算过程:00001100 >> 2 = 00000011
result = 3  // 十进制 3
示例 2:有符号右移(算术右移)
char a = -16; // 二进制表示为 11110000(补码表示法)
char result = a >> 2; // 右移2位
计算过程:11110000 >> 2 = 11111100  // 符号位补1
结果:
result = -4  // 十进制 -4

用例:采用异或运算 交换两个数 节省空间

#include<stdio.h>
int main()
{   
    int a = 69;
	int b = 72;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("%d %d", a, b);
	return 0;
}

结果:  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值