移位操作符与位操作符

移位操作符

移位操作符的操作数只能是整型

左移操作符

规则:左边抛弃,右边补0。

int main()
{
	int a = 1;      //  00000000 00000000 00000000 00000001
	int b = a << 1; //  00000000 00000000 00000000 00000010
	return 0;
}

左移操作符一定程度上有放大两倍的效果

但要切记, a <<1 并未改变 a的值。可以类比于 a+1 a没有改变。

右移操作符

右移操作符的规则相对于左移操作符而言还是有一些区别

右移操作符有两种规则,具体使用时采用哪种规则与编译器有关。

 算数移位

规则:右边抛弃,左边补符号位。

int main()
{
	int a = 10;      //  10000000 00000000 00000000 00001010
	int b = a >> 1;  //  11000000 00000000 00000000 00000101  值为1,073,741,829
	return 0;
}

 算数移位不会改变符号,而逻辑移位就不一定了

逻辑移位

规则:右边抛弃,左边补0。

int main()
{
	int a = 10;      //  00000000 00000000 00000000 00001010
	int b = a >> 1;  //  00000000 00000000 00000000 00000101 值为5
	return 0;
}

注:当负数进行逻辑移位时,符号将会改为正号。

对于正数而言,右移一位有  /2  的效果,但对于负数而言却不一定,不建议使用移位代替 / 操作符。

位操作符

按位与 &

规则:同为真时为真,反之为假

按位与1&1=10&0=01&0=00&1=0

举个例子

int main()
{
	int a = 1;     // 00000000 00000000 00000000 00000001
	int b = 2;     // 00000000 00000000 00000000 00000010
	int c = a & b; // 00000000 00000000 00000000 00000000
	return 0;
}

按位或 |

规则:存真时便为真,全为假时方为假

按位或1|1=10|0=01|0=00|1=0

举个例子

int main()
{
	int a = 1;     // 00000000 00000000 00000000 00000001
	int b = 2;     // 00000000 00000000 00000000 00000010
	int c = a | b; // 00000000 00000000 00000000 00000011
	return 0;
}

按位异或 ^

规则:相同为假,相异为真

按位异或1^1=00^0=01^0=10^1=0

举个例子

int main()
{
	int a = 1;     // 00000000 00000000 00000000 00000001
	int b = 2;     // 00000000 00000000 00000000 00000010
	int c = a ^ b; // 00000000 00000000 00000000 00000011
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值