//获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列 //整数的二进制表示 void printBinary(int number) { for (int i = 0; i < 32; i++) { printf("%d", (number >> (31 - i)) & 1); /*(number >> (31 - i))是一个右移操作 当 i = 0 时,我们计算 (number >> (31 - 0)) & 1,即 (number >> 31) & 1。 因为 number 被右移了31位,所以只有最高位(在这里是0)参与按位与操作, 结果是 0。 从最高位开始和1开始进行按位与 对应的二进制,有0就是0,两个是1才是1 1的二进制数仅仅只有最低位的数字是1,其他的全是0 所以将一个数和1按位与就是想把那个数的最低位提取出来 num >>31位的最低位就是最先的第一位,然后通过i的变化 逐步将你输入的值的二进制数每一位都提取出来 */ } printf("\n"); } int main() { int number; printf("请输入一个整数:"); scanf("%d", &number); printf("整数的二进制表示为:"); printBinary(number); printf("偶数的二进制表示为:"); //偶数位从0开始的,每个偶数位间隔为2 for (int i = 0; i < 32; i += 2) { printf("%d", (number >> i) & 1);//将二进制的偶数位上面的数提取出来 //随着i的变化,每次加2,都是偶数位 } printf("\n"); printf("奇数位二进制表示为:"); //奇数位从1开始的,间隔是2 for (int i = 1; i < 32; i += 2) { printf("%d", (number >> i) & 1); } printf("\n"); return 0; }