位运算总结之GGBond版


一、位运算

1.按位与(&)

按位与运算符(&)是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0 。参与运算的数以补码方式出现。

例如:3&2可写算式如下:00000011(3的二进制补码)&00000010(2的二进制补码)=00000010(2的二进制补码),可见3&2=2 。
int main()
{
	printf("%d", 3 & 2);
	return 0;
}

输出结果:2

2.按位或运算符(|)

按位或运算符(|)是双目运算符。其功能是参与运算的两数各对应的二进位相或。只有对应的两个二进位有一个为1时,结果位就为1,否则为0 。参与运算的数以补码方式出现。

例如:3|2=00000011|00000010=00000011=3
int main()
{
	printf("%d", 3 | 2);
	return 0;
}

输出结果:3

3.按位异或运算符(^)

按位异或运算符(^)是双目运算符。其功能是参与运算的两数各对应的二进位相异或。只有对应的两个二进位相异是,结果位就为1,否则为0 。参与运算的数以补码方式出现。

例如:3^2=00000011 ^ 00000010=00000001=1
int main()
{
	printf("%d", 3 ^ 2);
	return 0;
}

输出结果:1

4.求反运算(~)

按位异或运算符(~)是单目运算符,具有右结合性(即表达式从右往左进行)。其功能是参与运算的数的各二进位按位求反。参与运算的数以补码方式出现。

例如:~ 9 =~ (00001001)=(11110110)
需要注意的是最后出现的数是补码的形式出现的,所以上例中11110110的原码为10001010=-10

int main()
{
	printf("%d", ~9);
	return 0;
}
输出结果:-10

5.左移运算(<<)

左移运算符(<<)是双目运算符。其功能是参与运算的数的各二进位全部左移若干位,高位舍弃,低位补0。

例如:1<<2=00000001<<2=00000100=4
int main()
{
	printf("%d",1<<2);
	return 0;
}
输出结果:4

6.右移运算(>>)

右移运算符(>>)是双目运算符。其功能是参与运算的数的各二进位全部右移若干位,低位舍弃,高位补0 。对于负数来说,符号位的1不动。

例如:
8>>2=00001000>>2=00000010=2
-8>>2=10001000>>2=10000010=-2

int main()
{
	printf("%d\n%d",8>>2,-8>>2);
	return 0;
}
输出结果:

2
-2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值