一、二进制基础
二进制是计算机内部处理数据和指令的基本数值系统,只有0和1两个数字,用于表示计算机中的“开关”状态。 C语言中打印二进制需要运用到位运算符,位运算符直接对二进制位进行操作。 C语言中采用的是补码表示法,原码取反加1。
二、用移位运算实现二进制输出
移位运算符在位运算符中常用于二进制数的操作。当使用移位运算符时,每次操作都是将所有位向左或向右移动指定数量的位置。
移位运算的两种形式:
1、左移运算符: <<
。将所有位向左移动指定数量的位置。在左移时,右边空出的位置以0填充。
2、右移运算符: >>
。将所有位向右移动指定数量的位置。
移位运算符可以将一个整数转换成其二进制表示形式的各个位输出到终端上,实现二进制输出。
#include <stdio.h>
int main()
{
int num = 10; //十进制数
printf("二进制输出:");
for(int i = 31; i >= 0; i--) //按位输出,从最高位开始
{
printf("%d", num >> i & 1); //移位并与1进行与运算
}
printf("\n");
return 0;
}
三、位运算实现单个二进制位的输出
除了移位运算之外,位运算还可以实现单个二进制位的输出,通常运用到“按位与”和“按位或”运算符。
按位与运算符 &
通常用于按位清零操作,即用0清除二进制位,将某一位变为0。而按位或运算符 |
通常用于按位置1操作,即用1对二进制位进行填充,将某一位变为1。
通过位运算可以方便地输出任意一个二进制数中的指定位,用于查看单个二进制位的取值和状态。
#include <stdio.h>
int main()
{
int num = 10; //十进制数
int b1 = num & 1; //获取最低位
int b4 = num >> 3 & 1; //获取第四位
printf("最低位为:%d\n", b1);
printf("第四位为:%d\n", b4);
return 0;
}
四、用数组实现二进制输出
可以通过数组存储二进制数的每一位,然后循环输出数组中的每一项。 此时需要注意的是C语言中数组下标从0开始,因此需要倒序遍历数组并输出数组中的每一个元素。
#include <stdio.h>
int main()
{
int num = 10; //十进制数
int arr[32]; //用数组存储二进制数的每一位
int i = 0;
printf("二进制输出:");
while(num > 0) //将十进制数转换成二进制数,存储在数组中
{
arr[i] = num % 2;
num /= 2;
i++;
}
for(int j = i - 1; j >= 0; j--) //倒序输出数组中的每一项
{
printf("%d", arr[j]);
}
printf("\n");
return 0;
}
五、用函数封装实现二进制输出
可以通过函数封装上述代码,方便调用以及实现多次调用。 函数实现过程与第二个示例类似,只是将其中的数字10变为函数参数,这样可以根据需要任意输出任意一个十进制数的二进制表示形式。
#include <stdio.h>
void printBinary(int num) //封装函数,输出任意一个十进制数的二进制表示形式
{
printf("二进制输出:");
for(int i = 31; i >= 0; i--)
{
printf("%d", num >> i & 1);
}
printf("\n");
}
int main()
{
int num = 10; //十进制数
printBinary(num);
return 0;
}