C/C++中的任意大小整数

Sim*_*oño 4 c c++ integer

  • 有没有办法使用c/c ++创建任意大小的整数?

例如:

int main(void) {
  Int i = Int(3); //3-bit integer
  i = 1; //Represented as: 001
}
Run Code Online (Sandbox Code Playgroud)

奖金

  • 有没有办法对浮动值做同样的事情?

mil*_*bug 6

您不能创建大小小于的整数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);
Run Code Online (Sandbox Code Playgroud)

或使用位域(语法更好,但二进制布局是实现定义的)

struct Date
{
    unsigned day : 5;
    unsigned month : 4;
    unsigned year : 21; 
};

Date d;
d.day = 5; d.month = 11; d.year = 2014;
Run Code Online (Sandbox Code Playgroud)


Aas*_*set 5

您可以尝试GNU 多精度算术库,它支持整数、分数和实数。