|  | 
 
| 
位运算2
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 位运算应用
 
 例题1:分析以下程序的位运算的结果
 
 
 复制代码#include<stdio.h>
int main()
{
    unsigned char a,b,c;            //声明字符类型变量
    a=0x3;          //a是十六进制数
    b=a|0x8;        //按位或
    c=b<<1;         //左移运算
    printf("%d\n%d\n",b,c);
    return 0;
}
 例题分析:
 变量a的二进制数:(00000011)
 0x8的二进制数:(00001000)
 变量b的二进制数:
 00000011
 |   00001000
 00001011    十进制11的二进制码
 
 变量b左移1位,结果是:(00010110)
 所以变量c的值是十进制22。
 
 
 
 例题2:取一个整数a的二进制形式从右端开始的4~7位,并以八进制形式输出。
 
 
 复制代码#include<stdio.h>
int main()
{
    unsigned short a,b,c,d;     //声明字符型变量
    scanf("%o",&a);
    b=a>>4;         //右移运算
    c=~(~0<<4);     //取反左移后再取反
    d=b&c;          //按位与
    printf("%o\n%o\n",a,d);
    return 0;
 例题分析:
 本范例分3步运行,先使a右移4位,然后设置一个低4位全为1、其余全为0的数,可用~(~0<<4),最后将上面二者进行&运算。
 我们输入的八进制数是1640,转换为二进制数是 0000001110100000,获取其右端开始的4~7位是二进制数1010,转换为八进制就是12。
 
 
 
 例题3:将无符号数a右循环移n位,即将a中原来左面(16-n)位右移n位,即将a中原来左面(16-n)位右移n位,原来右端n位移到最左面n位。
 
 
 复制代码#include<stdio.h>
int main()
{
    unsigned short a,b,c;       //声明字符型变量
    int n;
    scanf("%o,%d",&a,&n);       //输入八进制和十进制
    b=a<<(16-n);                //左移运算
    c=a>>n;                     //右移运算
    c=c|b;                      //按位或
    printf("%o\n%o\n",a,c);     //输出八进制
    return 0;
}
 例题分析:
 本范例分3步进行,将a,右端的n位先放到b中的高n位中,实现语句b=a<<(16n);将a右移n位,其左面高位n位补0,实现语句c=a>>n;最后c与b进行按位与或运算,即c=c|b。
 我们输入的八进制数是1641,转换为二进制数是0000001110100001,获取其循环移3位,结果是0010000001110100,转换为八进制就是20164。
 
 
 | 
 |