运算符与表达式(三)——位运算符

位运算符:&(按位与)  |(按位或)  ^(异或)  ~(取反)  <<(左移)  >>(右移)

常量是有符号的,位操作中无符号数要进行强制类型转换!

1.        按位与(两者都为1结果才为1,有0结果必为0)

应用:

清零特定位:(mask中特定位置0,其他位为1,s = s & mask;)

取某数指定位:(mask中特定位置1,其他位为0,s = s & mask;)

2.        按位或(两者都为0结果才为0,有1结果必为1)

应用:

将源操作数某些位置1,其余位不变(mask中特定位置1,其他位为0,s = s | mask;)

3.        异或(两者不同为1,相同为0)

应用:

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

不引入第三变量,交换两个变量的值(三种)

1)        a = a + b;  b = a – b; a = a – b;不适用于两个大数交换,会导致越界

2)        a = a * b;  b = a / b; a = a / b;不适用于有0的两数交换

3)        a = a ^ b;  b = a ^ b; a = a ^ b;建议使用,效率高

4.        左移

高位丢弃,低位补0

5.        右移

对于无符号数:高位补0,低位丢弃

对于有符号数:正数高位补0,负数高位补0或补1由编译系统规定(gcc中右移补1

6.        C语言性能优化:使用位运算

使用位运算减少除法和取模的运算,在计算机中数据的位是可以操作的最小数据单位,理论上可以用位运算来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者进行数据交换,灵活的位操作可以有效地提高程序运行的效率。

7.        进制转换:

十进制转二进制显示:

方法一:


方法二:


十进制转十六进制显示:


8.        掩码mask

什么是掩码?

掩码是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。将源码与掩码经过按位运算或逻辑运算得出新的操作数。其中要用到按位运算如OR运算和AND运算。用于如将ASCII码中大写字母改作小写字母

m到n位置1计算公式:

1.        mask =(unsigned int)((~(unsigned int)0) >> (32 – (n – m + 1))) << m;

2.        for(i = 0; i <= m; i++)

          {

                 mask1 = 2 * mask;

          }

          for(i = 0; i <n; i++)

          {

                 mask2 = 2 * mask;

          }

          mask = mask1 – mask2;

          mask = int2bin(mask);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值