问题
- 有没有一种方法可以使用C/C++创建任意大小的整数?
例如:
int main(void) {
Int i = Int(3); //3-bit integer
i = 1; //Represented as: 001
}
奖金
- 有没有一种方法可以处理浮点数?
您不能创建比char
更小的整数(也就是说,每个对象的大小以sizeof(char)
的倍数来衡量,它的值为1)。但这不是问题,因为您可以将数字打包到较大的数字中。
const unsigned size_in_bits = 3;
unsigned a = 1; // 001
unsigned b = 5; // 101
unsigned packed = (b << size_in_bits*1) | (a << size_in_bits*0); // 101001
unsigned unpacked_a = (packed >> size_in_bits*0) & ((1 << size_in_bits)-1);
unsigned unpacked_b = (packed >> size_in_bits*1) & ((1 << size_in_bits)-1);
struct Date
{
unsigned day : 5;
unsigned month : 4;
unsigned year : 21;
};
Date d;
d.day = 5; d.month = 11; d.year = 2014;
bitset
或 vector<bool>
进行环绕操作会使程序变得不必要的缓慢和复杂。bitset
甚至不支持动态大小,必须在编译时确定。 - dtechbitset
或 vector<bool>
作为容器更加便捷。 - Thomas Matthewsmalloc();
函数。#include <stdio.h>
#include <stdlib.h>
#define MAX_DIGIT_COUNT 1000
int main()
{
int* big_num = (int*)malloc(sizeof(int) * MAX_DIGIT_COUNT); //allocate memory
for(int x; x<MAX_DIGIT_COUNT; x++)
{
/*
*Iterating through number - iterating works, because we are basing out max number lenght
*off of the maximum digits, and therefore, we can have a maximum of 2^64 digits
*/
big_num[x] = rand()%5; //fill up memory block with psuedo-random numbers
}
/*Printing begins here...*/
for(int i; i<MAX_DIGIT_COUNT; i++)
{
int iterated;
iterated = big_num[i];
printf("%d", iterated);
}
printf("\n");
/*Printing ends here*/
return 0;
}
char
(有符号或无符号)、int
(16位或32位)、long
(32位或64位)的范围。我认为编译器具有最终控制权,而不是硬件。 - chux - Reinstate Monica
1/3
操作,将会导致堆栈溢出! - MSalters_BitInt(3)
添加它们。如果被批准,这可能是一个额外的未来答案。 - Dwayne Robinson