把十进制转成二进制的一个简单易行的方法(不需要用栈) .

        前面已经用了一个比较简单的方法把十进制转成十六进制,只需要把%d改成%X即可,如果是八进制,则改成%O即可,但是,查了资料之后发现没有二进制对应的形式. 有时候,为了对数据进行分析,的确需要把十进制化成二进制形式,便于分析每一位,当然用Windows自带的计算器是可以快速转换的,但那样很麻烦,而且不能实现批量转换.

        那怎么办呢?自然而然想到利用栈来实现,其实,根本没有必要利用栈,而且,在一个C语言工程(.c文件)中,用栈很麻烦,因为不可以用C++的stack. 下面的方式可以很好地解决上述问题.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>

// 把十进制转成二进制,并保存存在文件里
void printBinaryDigitIntoFile(FILE *fp, int i)
{
	assert(i >= 0 && i <= 255);

	char str[20];
	int r = 2;
	itoa(i, str, r); // 重要函数

	int length = strlen(str);
	int j;
	for(j = length; j < 8; j++)
		fprintf(fp, "0"); // 前面补0

	fprintf(fp, "%s\n", str);
}

int main()
{
	FILE *fp = fopen("myData.txt", "w");
	int i;
	for(i = 0; i <= 255; i++)
	{
		printBinaryDigitIntoFile(fp, i);
	}
	fclose(fp);

	return 0;
}

       在myData.txt中的结果为:

00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
00010001
00010010
00010011
00010100
00010101
00010110
00010111
00011000
00011001
00011010
00011011
00011100
00011101
00011110
00011111
00100000
00100001
00100010
00100011
00100100
00100101
00100110
00100111
00101000
00101001
00101010
00101011
00101100
00101101
00101110
00101111
00110000
00110001
00110010
00110011
00110100
00110101
00110110
00110111
00111000
00111001
00111010
00111011
00111100
00111101
00111110
00111111
01000000
01000001
01000010
01000011
01000100
01000101
01000110
01000111
01001000
01001001
01001010
01001011
01001100
01001101
01001110
01001111
01010000
01010001
01010010
01010011
01010100
01010101
01010110
01010111
01011000
01011001
01011010
01011011
01011100
01011101
01011110
01011111
01100000
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01101001
01101010
01101011
01101100
01101101
01101110
01101111
01110000
01110001
01110010
01110011
01110100
01110101
01110110
01110111
01111000
01111001
01111010
01111011
01111100
01111101
01111110
01111111
10000000
10000001
10000010
10000011
10000100
10000101
10000110
10000111
10001000
10001001
10001010
10001011
10001100
10001101
10001110
10001111
10010000
10010001
10010010
10010011
10010100
10010101
10010110
10010111
10011000
10011001
10011010
10011011
10011100
10011101
10011110
10011111
10100000
10100001
10100010
10100011
10100100
10100101
10100110
10100111
10101000
10101001
10101010
10101011
10101100
10101101
10101110
10101111
10110000
10110001
10110010
10110011
10110100
10110101
10110110
10110111
10111000
10111001
10111010
10111011
10111100
10111101
10111110
10111111
11000000
11000001
11000010
11000011
11000100
11000101
11000110
11000111
11001000
11001001
11001010
11001011
11001100
11001101
11001110
11001111
11010000
11010001
11010010
11010011
11010100
11010101
11010110
11010111
11011000
11011001
11011010
11011011
11011100
11011101
11011110
11011111
11100000
11100001
11100010
11100011
11100100
11100101
11100110
11100111
11101000
11101001
11101010
11101011
11101100
11101101
11101110
11101111
11110000
11110001
11110010
11110011
11110100
11110101
11110110
11110111
11111000
11111001
11111010
11111011
11111100
11111101
11111110
11111111

        当然, 如下程序也是很nice的:

#include<stdio.h>

void printBinaryDigit(int n)
{
	int sizeOfBits = sizeof(int) * 8;
	int i = sizeOfBits - 1;
	for(i = sizeOfBits - 1; i >= 0; i--)
	{
		if(n & (1 << i))
		{
			printf("1");
		}
		else
		{
			printf("0");
		}
	}

	printf("\n");
}

int main()
{

	int n;
	for(n = -3; n <= 3; n++)
	{
		printBinaryDigit(n);
	}

	return 0;
}

       结果;

11111111111111111111111111111101
11111111111111111111111111111110
11111111111111111111111111111111
00000000000000000000000000000000
00000000000000000000000000000001
00000000000000000000000000000010
00000000000000000000000000000011

    原文作者:进制转换
    原文地址: https://blog.csdn.net/stpeace/article/details/8219996
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞