(C语言)如何将一个数字的二进制形式输出出来

一. 我们知道由十进制转二进制的算法,因此可以直接计算出其二进制数

        例如:对3求其二进制

(C语言)如何将一个数字的二进制形式输出出来_第1张图片

int main()
{
	int n = 3;
	int arr[33] = { 0 };//int 型有32个字节
	int i = 0;
	while (n > 0)
	{
		arr[i] = n % 2;
		++i;
		n /= 2;
	}
	int k = 0;
	for (k = i-1; k >= 0; k--) //逆序输出
	{
		printf("%d", arr[k]);
	}
	return 0;
}

二. 因为数字在计算机中就是以二进制的形式存储的,那我们也可以通过  位运算符  来表示出一个数的二进制。

        用&(按位与)运算符,其运算原理是对其两个操作数的计算机内存储的二进制形式(补码)的对应位进行按位与,如果1&1结果是1,其他结果都是0。

例如 3&5:

int a = 3;
//a: 00000000000000000000000000000011

int b = 5;
//b: 00000000000000000000000000000101

int c = a & b;
//c: 00000000000000000000000000000001

         因此,可以让一个数n&1,然后得到n的二进制的第一位的值(如果结果是1,那n的二进制的第一位也是1,如果是0,那第一位是0),然后让n右移一位n>>1,然后找其第二位。。。。。。然后一直遍历到第32位。

int main()
{
	int n = 5;
	int i = 0;
	int arr[33] = { 0 };//int 是有32位的
	//从第一位开始依次取n对应二进制的每一位
	for (i = 1; i <=sizeof(int) * 8; i++)
	{
		arr[i] = n & 1;  
		n=n	>> 1;	 
	}
	//printf("%d\n", i);
	int k = 0;
	//逆序输出
	for (k = i-1; k >= 1; k--)
	{
		printf("%d", arr[k]);
	}

	printf("\n");
	return 0;
}

运算结果:

        但是用数组存,有点麻烦,所以我又改进了一下

int main()
{
	int n = 5;//0000000101
	int i = 0;
	int k = 1 << 31;

	for (i = 0; i < sizeof(int) * 8; i++)
	{
		printf("%d", -((n & k) >> 31));
		n <<= 1;
	}

	printf("\n");
	return 0;
}

 但是我感觉还是有点麻烦,可又想不出更好的方案了。。。。。。

___________________________________________________________

如果您有更好的方法,可以分享给我,我也学习一下。^-^

你可能感兴趣的:(一起来看C语言,c语言,蓝桥杯,开发语言)