C++位运算符及其运用

一、认识位运算符

运算符
运算符名称符号
按位与&
按位或|
取反~
异或^
左移<<
右移>>

注:

1.&和&&的区别:(|和||同理)

eg:                                                                          eg:

15&127=15                                                            15&&127=1

原因解释:(从二进制来看)                                原因解释:

15(00001111)                                                     两个数都不为0,即都为真,故为1.

127(11111111)

按位取与便是15(00001111)

2.位操作只能用于整形数据,对float和double类型进行位操作会被编译器报错。

二、位运算符的运用

1.与(&)运算符的运用

1.1.判断奇偶(最后一位,奇数为1,偶数为0)

int main()
{
	int num=99;
	int judge = 1;
	cout << (num & judge ? "奇数" : "偶数") << endl;
}

 1.2.判断2的整数幂

int num = 64;
    int judge = num - 1;
    cout << ((num & judge) ? "no" : "yes") << endl; 

2的整数幂 后面皆为0,首位为1

减1后,后面皆为1,首位为0

1.3.汉明权重问题

没太看懂,详见:C语言-统计二进制数中1的个数-Hamming weight-汉明权重问题_kuweicai的博客-CSDN博客

2.异或(^)运算符(同为0,异为1)

异或运算符需要理解的结论:

(1)a^a=0;

(2)a^0=a;(0的二进制每一位都为0;0^0=0,0^1=1;)

2.1交换整型变量(不用第三个变量)

代码:

void swap(int& a, int& b)
{
	a = a ^ b;
	b = a ^ b;
	a = b ^ a;
}

结果展示:

理解:

1.a=a^b

2.b=a^b这步表示:b=(a^b)^b=a^(b^b)=a^0=a;

3.a=b^a这步表示:a=a^(a^b)=(a^a)^b=0^b=b;

 2.2.交换double类型变量

代码:(加一步强转int)

void swap(double& a, double& b)
{
	a = (int)a ^ (int)b;
	b = (int)a ^ (int)b;
	a = (int)b ^ (int)a;
}

3.左移(<<)和右移(>>)运算

理解:

左移:在符号位不为1的情况下,相当于乘2,右边补0

右移:

对于无符号数,左边补0

对于有符号数

若符号位为0,则左边还是补0

若符号位为1,则左边补什么由不同系统决定

代码测试:

 

 代码:

int main()
{
	int a = -11;
	cout << a << endl;
	cout << bitset<sizeof(int) * 8>(a) << endl;
	a=a << 2;
	cout << a << endl;
	cout << bitset<sizeof(int) * 8>(a) << endl;
	a=a >> 3;
	cout << a << endl;
	cout << bitset<sizeof(int) * 8>(a) << endl;

}

注:如何查看数字二进制编码:

头文件:#include<bitset>

格式:bitset<sizeof(int)*8>(a)

参考文章:

(2条消息) C/C++ 中的位运算及其典型应用_kuweicai的博客-CSDN博客

C++:位操作基础篇之位操作全面总结 - 莫水千流 - 博客园 (cnblogs.cda

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值