2012年(32)
分类: C/C++
2012-03-11 13:37:31
git clone git://git.code.sf.net/p/cutility/code cutility-code长整数总共有两个文件一个为big_integer.h,一个为big_integer.c
- typedef unsigned short b_unit;
- typedef short sb_unit;
- typedef unsigned long twob_unit;
- typedef long stwob_unit;
- struct big_integer
- {
- int b_len;
- b_unit b_val[0];
- };
- typedef struct big_integer BGInteger;
其中:其中 len为b_len,value为b_val,shift的值为15
BGInteger有5种创建方法分别为:
- BGInteger* bg_create_from_int(int value);
- BGInteger* bg_create_from_octstr(char* str);
- BGInteger* bg_create_from_binstr(char* str);
- BGInteger* bg_create_from_decstr(char* str);
- BGInteger* bg_create_from_hexstr(char* str);
其中:
- bg_create_from_int表示从一个整数中生成BGIngter。
- bg_create_from_binstr表示从二进制字符串中读取数据,然后返回BGInteger。但要求能存在’0‘或者’1‘两种字符,否则不能返回正确的结果。
- bg_create_from_octstr表示从八进制字符串中读取数据,然后返回BGInteger。但要求能存在’0‘到’7‘这8种字符,否则不能返回正确的结果。
- bg_create_from_decstr表示从十进制字符串中读取数据,然后返回BGInteger。但要求能存在’0‘到’9‘这10种字符,否则不能返回正确的结果。
- bg_create_from_hexstr表示从十六进制字符串中读取数据,然后返回BGInteger。但要求能存在’0‘到’9‘和'a'到'f'这16种字符,否则不能返回正确的结果。
- BGInteger* bg_plus(BGInteger* left, BGInteger* right);
- BGInteger* bg_minus(BGInteger* left,BGInteger* right);
其中:
- bg_plus返回两长整数相加的结果;
- bg_minus返回两长整数相减的结果。
- BGInteger* bg_mul(BGInteger* left,BGInteger* right);
- BGInteger* bg_div(BGInteger* left,BGInteger* right);
- BGInteger* bg_mod(BGInteger* left,BGInteger* right);
其中:
- bg_mul返回两长整数相乘的结果;
- bg_div返回两长整数相除的结果,并且要求参数right值不能为0,如果为0,则返回NULL
- bg_mod对两长整数求余,返回值为余数,要求参数right值不能为0,如果为0,则返回NULL
- BGInteger* bg_lshift(BGInteger* left,BGInteger* right);
- BGInteger* bg_rshift(BGInteger* left,BGInteger* right);
其中:
- bg_lshift返回值为参数left左移right位后的值,要求参数right不参为负数,并且大能大于2^31。否则返回结果为NULL
- bg_lshift返回值为参数left右移right位后的值,要求参数right不参为负数,并且大能大于2^31。否则返回结果为NULL
- BGInteger* bg_and(BGInteger* left,BGInteger* right);
- BGInteger* bg_or(BGInteger* left,BGInteger* right);
- BGInteger* bg_xor(BGInteger* left,BGInteger* right);
- BGInteger* bg_invert(BGInteger* bg);
其中:
- bg_and返回两长整数相与的结果
- bg_or返回两长整数相或的结果
- bg_xor返回两长整数异或的结果
- bg_invert返回值为对参数bg取反后的结果
- int bg_cmp(BGInteger* left,BGInteger* right);
其中:
- bg_cmp表示比较两个长整数的大小,如果left
right返回值为1
- void bg_free(BGInteger* bg)
(8)输出长整数其中:
- bg_free释放bg占用的内存空间
- void bg_print_dec(BGInteger* bg);
- void bg_print_bin(BGInteger* bg);
其中:
- bg_print_dec是以十进制输出长整数的数值
- bg_print_bin以二进制输出长整数的数值