C 位操作

一. 位运算符

C提供了几种位操作符,如下表所示:

运算符

含义

运算符

含义

&

按位与

~

取反

|

按位或

<<

左移

^

按位异或

>>

右移

二. 位运算操作

1. "按位与" (&

原则是:11,00

2. “按位或” (|)

原则是:11,全00即只要有一个为1,则结果为1

3. “异或” (^)

原则是:相同为0,不同为1。即参与运算的两个位相同(‘1’与‘1’或‘0’与‘0’)时结果为‘0’,不同时为‘1’。

4. “取反” (~

原则是:10,是 01

5. "左移"(<<

用来将一个数的各位全部向左移若干位。

:a = a<<2 表示将a的各位左移 2 位,右边补0

左移 N 位,就等于乘以了2N,但一结论只适用于左移时被溢出的高位中不包含‘1’的情况。

6. "右移"(>>)

右移与左移相类似,只是位移的方向不同。

如:a = a>>1表示将a 的各位向右移动1位。

右移N位,就相当于除以2N,但要注意符号位的问题。

三. 应用

1. & 的应用

a. 特定位清零 (mask中特定位 置0,其它位为1,s = s & mask)

b. 取某数中指定位 (mask中特定位 置1,其它位为0,s = s & mask)

2. |的应用

a. 常用来将源操作数某些位 置1,其它位不变。 (mask中特定位 置1,其它位为0,s = s | mask)

3. ^ 的应用

a. 使特定位的值取反 (mask中特定位 置1,其它位为0,s = s ^ mask)

b. 不引入第三变量,交换两个变量的值 (a = a^b; b = a^b; a = a^b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值