移位操作符与位操作符

本文详细介绍了位操作符,包括左移操作符(乘以2的效果)、右移操作符(算术移位与逻辑移位的区别)以及按位与、按位或和按位异或的运算规则,并通过实例展示了它们在整数二进制表示中的应用。注意,右移对于负数并不总是除以2,因此不建议用移位代替除法操作。

移位操作符

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

左移操作符

规则:左边抛弃,右边补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;
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值