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

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

        例如:对3求其二进制

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;
}

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

___________________________________________________________

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

  • 27
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值