C语言第五篇:位运算


一、概念辨析:区分C语言中的逻辑运算和位运算


1、逻辑运算:


C语言中提供了三种逻辑运算符:

  • &&           与运算     双目运算符     左结合性     
  • ||              或运算     双目运算符     左结合性
  • !               非运算     单目运算符     右结合性

应用场合:用于条件语句


2、位运算:


C语言提供了六种位运算符:

  • (1) &          按位与            
  • (2) |            按位或              
  • (3) ^           按位异或                
  • (4) ~           取反           
  • (5) <<         左移

运算法则:x << y——将x左移y位,将x最左边的y位丢弃,在右边补y个0。对于signed和unsigned是相同的

  •  (6) >>        右移  

运算法则:x >> y——将x右移y位,这需要区分x是有符号数还是无符号数,具体情况如下:

  • a、在x是无符号数时,只需将x的最右边的y位丢弃,在左边补上y个0;
  • b、在x是有符号正数时,同无符号数的处理相同;
  • c、在x是有符号负数时,将将x的最右边的y位丢弃,在左边补上y个1。

应用场合:用于二进制运算


3、逻辑运算和位运算的区别(以逻辑与和按位与为例)


对于两个逻辑量,都是一样的;

对于两个整型量,就不一样了,例如,对2和1进行逻辑与和按位与运算:

  • 2&&1=1
  • 2&1=0   


二、位运算的使用


1、优秀程序员不得不知的20个位运算技巧


在本篇博客所举得例子中,完成相应功能的C语言代码都仅仅是一行位运算搞定。此处仅列出标题,以对该片博文的作者致敬。
  • (1)获得int型最大值
  • (2)获得int型最小值
  • (3)获得long型最大值
  • (4)乘以2运算
  • (5)除以2运算
  • (6)乘以2的m次方
  • (7)除以2的m次方
  • (8)判断一个数的奇偶性
  • (9)不用临时变量交换两个数
  • (10)取绝对值
  • (11)取两个数的最大值
  • (12)取两个数的最小值
  • (13)判断符号是否相同
  • (14)计算n的二次方
  • (15)判断一个数是不是2的幂
  • (16)对2的n次方取余
  • (17)求两个整数的平均值
  • (18)从低位到高位,取n的m位
  • (19)从低位到高位,将n的第m位置1
  • (20)从低位到高位,将n的第m位置0
  • (21)另:计算n+1,计算n-1,取相反数,
  • (22)sign函数,参数为n,当n>0时候返回1,n<0时返回-1,n=0时返回0。

另一篇参考博文:C/C++位运算技巧


2、位运算实现加法







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值