黑马程序员_C中几个位运算符的灵活运用

------- IOS培训IOS培训、期待与您交流! ----------


按位与 (&)原本功能:把两个数的二进制对应位做“与”操作,如果两位都为1则为1,否则为0。


应用场景:一、如果想取出某个数的某一位,就与上这一位为1,其余位都为0的一个数,结果如果为1,则这一位就为1,为0则为0。

如:1000如果想取出第三位是多少,就与上0100,结果为0,那么我们就知道,第三位为0。

二、清空某一位。通常用于单片机中,有些寄存器不支持按位操作,那么如果我们想让一个数的高几位都清0,那么也可以通过与操作来清空。

三、判断奇偶。用某一个数与上1,结果为1则是奇数,为0则是偶数。(一个二进制数,如果末位为1则次数为奇数,为0则为偶数,1与上任何数还为任何数。)

四、加密。你可以定义一套你自己的加密方式,比如向数据库写入密码时,用这套加密算法处理后再存入数据库,取出则用对应的解密算法,这样比打开数据库直接暴露出账户名密码要好得多。

----------------------------------------------------------------------------------------------------------------------------------------------------------

按位异或(^)原本功能:两个数的二进制对应位相同则为0,不同则为1。

应用场景:一、交换两个数。利用异或的与自己异或为0的原则

如:a=a^b;

b=a^b; //这时 b = a^b^b 即 b = a

a=a^b; //这时 a = a ^ b ^ a 即 a = b

二、使一个数的某一位翻转。

如:10010想让第四位翻转,就^01000,如果原来这一位为1,则翻转为0,反之则翻转为1。

三、判断连个数是否相等。

如:if(!(a^b))//如果相等

----------------------------------------------------------------------------------------------------------------------------------------------------------

左移(<<)原本功能:把一个数a的二进制位向左移n位(a<<n)

应用场景:快速计算一个数乘以2的几次方,如果在程序中大量使用,可以提高程序效率。(注意,使用到负数中时要注意数字是否溢出,致使左移使最高位符号位舍去,导致结果意想不到)

如:7 << 2 (即7*2的2次方)结果为28

----------------------------------------------------------------------------------------------------------------------------------------------------------

右移(>>)原本功能:把一个数a的二进制位向又移n位(a>>n)

应用场景:与左移相反,快速运算一个数除以2的几次方(如果除不开,则只保留整数部分)。

如:printf("%d",6>>3);(即6/6的3次方)结果为0(注意:不可以用%f输出,会导致程序意外崩溃,因为我们只是按结果找规律,计算机并不是真正这样计算。)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值