一、位运算
基本思路:
(1)使变量num右移8位,将8~11位移到低4位上。
(2)构造1个低4位为1、其余各位为0的整数。
(3)与num进行按位与运算。
/*程序功能:输出一个整数中由8~11位构成的数*/
main()
{ int num, mask;//掩码
printf("Input a integer number: ");
scanf("%d",&num);
num >>= 8; /*右移8位,将8~11位移到低4位上*/
mask = ~ ( ~0 << 4);
/*间接构造1个低4位为1、其余各位为0的整数*/
printf("result=0x%x\n", num & mask);
}
程序说明:~ ( ~0 << 4)
按位取0的反,为全1;左移4位后,其低4位为0,其余各位为1;再按位取反,则其低4位为1,其余各位为0。这个整数正是我们所需要的。
[案例] 从键盘上输入1个正整数给int变量num,按二进制位输出该数。
#include "stdio.h"
main()
{ int num, mask, i;
printf("Input a integer number: ");
scanf("%d",&num);
mask = 1<<31;
/*构造1个最高位为1、其余各位为0的整数(屏蔽字)*/
printf("%d=" , num);
for(i=1; i<=32; i++)
{ putchar(num&mask ? ’1’ : ‘0’);
/*输出最高位的值(1/0)*/
num <<= 1;
/*将次高位移到最高位上*/
if( i%4==0 ) putchar(‘,’);
/*四位一组,用逗号分开*/
}
printf("\bB\n");
}