运算符“&”,“|”,“~”,“^”,“<<”,“>>”


位运算与:&

0&0 = 0

0&1 = 0

1&0 = 0

1&1 = 1

代码演示:

#include<iostream>

using namespace std;

int main(){
    unsigned char ch1 = 61;	// 0011 1101
	unsigned char ch2 = 92;	// 0101 1100

	// 位运算与:&
	cout << "位运算且:" << (ch1 & ch2) << endl;	// 0001 1100	= 28
    return 0;
}

位运算或:|

0|0 = 0

0|1 = 1

1|0 = 1

1|1 = 1

代码演示:

#include<iostream>

using namespace std;

int main(){
    unsigned char ch1 = 61;	// 0011 1101
	unsigned char ch2 = 92;	// 0101 1100

	// 位运算或:|
	cout << "位运算或:" << (ch1 | ch2) << endl;	// 0111 1101 = 125
    return 0;
}

位运算非:~

~0 = 1

~1 = 0

代码演示:

#include<iostream>

using namespace std;

int main(){
    unsigned char ch3 = ~61;	// 61: 0011 1101
	cout << "位运算非:" << (int)(ch3) << endl;		// 1100 0010 = 194
    return 0;
}

位运算异或:^

0^0 = 0

0^1 = 1

1^0 = 1

1^1 = 0

(相同为0,不同为1)

代码演示:

#include<iostream>

using namespace std;

int main(){
    unsigned char ch1 = 61;	// 0011 1101
	unsigned char ch2 = 92;	// 0101 1100

	// 位运算异或:^
	cout << "位运算异或:" << (ch1 ^ ch2) << endl;	// 0110 0001 = 97
    return 0;
}

位运算左移:<<

右边的位用 0 来填充, 移动超出左边边界的位则直接抛弃。

向左移动 n 个位置,就等同于乘以 2 的 n 次,只适用于: int/short/long/char 等定点数类型(float/double 浮点数类型不能使用)

代买演示:

#include<iostream>

using namespace std;

int main(){
    unsigned char ch1 = 61;	// 0011 1101

	// 位运算左移:<<
    // 左移两位
	cout << "位运算左移:" << (ch1 << 2) << endl;	// 1111 0100 = 244
    return 0;
}

位运算右移:>>

如果右操作数是无符号类型,则左边多出来的位用 0 来填充。

如果右操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充。

向右移动 n 个位置,就等同于除以 2 的 n 次方 只适用于: int/short/long/char 等定点数类型(float/double 浮点数类型不能使用)

代码演示:

#include<iostream>

using namespace std;

int main(){
    unsigned char ch1 = 61;	// 0011 1101

	// 位运算右移:<<
    // 右移两位
	cout << "位运算左移:" << (ch1 >> 2) << endl;	// 0000 1111 = 14
    return 0;
}

综合练习:

把一个整数数最低的四位数变为0110

#include<iostream>

using namespace std;

int main(){
   unsigned char ch4 = 125;		
	// 第一步:后四位变为:0000 
	ch4 = ch4 & (~15);	//	15:1111 ~15: 1111 0000
	cout << "第一步:后四位为0000:" << (int)ch4 << endl;	// 112: 0111 0000
	// 第二步: 后四位为:0110
	ch4 = ch4 | 6;		// 0110: 6
	cout << "第二步: 后四位为0110:" << (int)ch4 << endl;		// 118:
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值