c语言字符型数右移一位,科学网—C语言的位运算 - 刘传武的博文

位运算即按二进制位(包括符号位)进行运算,是C语言的重要特色。只有字符型和整型数据可以进行位运算,浮点型不能进行位运算。原则上所有运算皆可化成位运算。C语言的位运算快于普通运算,所以是一种运算优化方法。

一、按位与(&)

0&0=0&1=1&0= 0,1&1=1。如3&5=0000 0011&0000 0101=0000 0001。负数参与&运算,以补码表示。应用:

1,对一个数的特定位置0。次数与一个这些位上为0的数进行&运算。

2,取一个数的某些位。此数与一个这些位上为1的数进行&运算。如取a的后四位:a&0000 1111。特别的,通过取最后一位可以判断此数的奇偶行,即a&1。

二、按位或(|)

0|0=0,0|1=1|0=1|1=1。如48|15=0011 0000|0000 1111=0011 1111。应用:

1,对一个数的特定位置1。此数与一个这些位上为1的数进行|运算。

三、异或(^)

0^0=1^1=0,0^1=1^0=1。如0011 1001^0010 1010=0001 0011。应用:

1,使一个数的特定位翻转。此数与一个特定位上为1的数进行^运算。

2,与0相^,保持原值。

3,交换两值,不用临时变量。a=a^b;b=b^a;a=a^b(或a^=b^=a^=b;)。

四,取反(~)

单目运算,0变1,1变0。如~0001 0101=1110 1010。~运算优先级高于其他位运算符。应用:

1,在不知数据长度的情况下,得到某些位为0的数。如~1=... 1111 1110。

2,得到unsign [long] int型的长度。...1111 1111=~0(即-1补码)。

五、左移(<

将一个二进制数左移若干位,右端补0,左端溢出舍弃。应用:

1,通过1<

2,左端不溢出的情况下,一个数左移n位等于乘以2的n次方。

六、右移(>>)

将一个二进制数左移若干位,右端移出舍弃。对无符号数和正的有符号数的左端补0;对负的有符号数,有的补0(逻辑右移或简单右移),有的补1(算数右移),取决于编译器(gcc为算数右移)。用途:

1,一个正数右移n位或一个负数算数右移n位等于或约等于除以2的n次方,当无1移出的情况下取等号。

通过位运算可以把多个较小的数存在一个数据的不同位段上。需要注意的是位运算虽然可以提高运算速度,但好的算法永远是代码优化的根本。

2013年9月23日

转载本文请联系原作者获取授权,同时请注明本文来自刘传武科学网博客。

链接地址:http://blog.sciencenet.cn/blog-1005104-727277.html

上一篇:C语言程序代码优化

下一篇:刘丁宁的北大情结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值