⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binary.c

📁 calc大数库
💻 C
字号:
/* binary.c */

#include <stdio.h>
#include "integer.h"
#include "fun.h"

/*
main()
{
	unsigned long i, j;
	printf("Enter an unsigned int: ");
	scanf("%lu", &i);
	printf("%u\n", binary(i));
*/
	

/*
	
	for (i = 0; i < 16; i++)
	{
		for (j = 0; j < 16; j++)
		{
			if (i != 0 || j != 0)
				printf("%u,", BINARY(16 * i + j));
		}
		printf("\n");
	}
}

*/
unsigned int binary(USL i)
/*
 * returns the number of binary digits of i.
 */
{
	static unsigned int bin[256] = {
	0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,
	5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
	6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
	6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
	7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
	7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
	7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
	7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8};

	unsigned int j;

	if ((j = (i >> 24)))
		return (24 + bin[j]);
	else if ((j = (i >> 16)))
		return (16 + bin[j]);
	else if ((j = (i >> 8)))
		return (8 + bin[j]);
	else /* 0 <= i < 255 */
		return (bin[i]);
}

unsigned int BINARY(USL i)
/*
 * returns the location of the rightmost bitset of i (non-zero).
 */
{
	static unsigned int BIN[255] = {
	  0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
	4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0};
	
	unsigned int j;

	if ((j = (unsigned int)(i & (USL)255)))
		return (BIN[j - 1]);
	else if ((j = (unsigned int)((i >> 8) & (USL)255)))
		return (8 + BIN[j - 1]);
	else if ((j = (unsigned int)((i >> 16) & (USL)255)))
		return (16 + BIN[j - 1]);
	else 
	{
		j = (unsigned int)((i >> 24) & (USL)255);
		return (24 + BIN[j - 1]);
	}
}

unsigned int BINARYB(MPI *N)
/*
 * returns the number of binary digits of N.
 */
{
	return (T0 * (N->D) + binary(N->V[N->D]));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -