一、位运算
基本思路: (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"); }