C++ 位操作符、自增自减操作符

位操作符就是把整型看作二进制为的序列,然后然后对每个位分别进行位操作。由于二进制每个位只可能是0或1,因此一些类似逻辑操作的运算可以运用在每一位上,也就是位与、位或、位求反和位异或。

//c++位操作符

操作符说明
&位与,如a&b
|位或,如a|b
^位异或,如a^b
~

位求反(非),如~a

<<左移,    如a<<b
>>右移,如a>>b

//位与、位或、位异或、在不同二进制数值组合下的运算结果:

   p      q   p&qp|qp^q
00000
01011
11110
10011

除此之外,位求反就是简单的将0变成1,将1变成0.

//位操作符

#include <iostream>
using namespace std;

//位操作符

int main()
{
	int a = 1; //0b01
	int b = 3; //0b11
	cout <<"a & b: " << (a & b) << endl;
	cout <<"a | b: " << (a | b) << endl;
	cout <<"a ^ b: " << (a ^ b) << endl;
	cout <<"~a : " << (~a) << endl;
	return 0;
}

        程序的注释中标注了数字的二进制形式,分别是01和11.可以看到由于两个数的高一位并不都是1,因此位与的结果是0,而低一位都是1,所以结果是1,和在一起是01,也就是十进制的1.其他的以此类推。位或:二进制11,十进制3;位异或:二进制 10,十进制 2;位求反:二进制10,十进制2.

//左移和右移符操作符

左移和右移操作符就是把整型的每一位都左移或右移,例无符号二进制数01001001b,左移一位,右边补0,在左移一位,最左边的1才会移除,右移则相反。

#include<iostream>
using namespace std;

//左移和右移操作符

int main()
{
	unsigned int a = 4;
	cout << "a << 1: " << (a<<1) << endl;
	cout << "a >> 1: " << (a>>1) << endl;
	return 0;
}

 输出结果为:a<<1 :8

                            a>>1 :2 

//自增自减操作符

        自增自减操作符其实就是对操作数进行加一或者减一。一些计算机指令中存在着不同于加法add和减法sub的加一Inc和减一dec指令,但加一和减一有自己的操作符,可以直接对应。

        自增自减操作符分别有前缀和后缀两种形式:前缀自增、自减是先进行运算然后得到表达式的返回值;而后缀自增、自减则是先返回值,在进行运算。

//自增自减操作符

操作符说明
++自增,如a++(后缀形式)或++a(前缀形式)
--自减,如a-- (后缀形式)或--a(前缀形式)
#include<iostream>
using namespace std;


//自增自减操作符

int main()
{
	int a = 2 ;
	cout << "a = " << a << endl;
	cout << "++a=" << ++a << endl;
	cout << "a++=" << a++ << endl;
	cout << "--a=" << --a << endl;
	cout << "a--=" << a-- << endl;
	return 0;
}

结果 :

这个结果可能会让人感到困惑,为什么a经过了两次递增,两次递减,结果却是3呢?

这是因为在a++之后先返回了原来a的值3,再加一个成为4,之后自减由于是--在前,则4-1成为3后返回给了cout,最后一个a--与a++类似,返回3的a的最终值为2.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值