在我们平时开发遇到需要数字的场景中,大多数的情况i64
或者u64
这两个类型已经可以覆盖了,但是还有一些意外情况是需要更大更大的数字类型,这时候就需要BIGNUM类型了。
bignum
在V语言中以全局模块(global module)的形式存在于源码vlib
中,如需使用bignum
模块,只要简单在文件中引入即可:
import bignum
V语言中bignum
的类型定义为Number
,在源码中可以看到该结构体,下面介绍下bignum
模块中主要的一些方法。
- 初始化函数
new_bignum()
pub fn new_bignum() Number
该函数返回一个空的Number
对象
- 从
int
类型实例化
pub fn from_int(i int) Number
- 从
u64
类型实例化
pub fn from_u64(u u64) Number
- 从
string
类型实例化
pub fn from_string(s string) Number
- 转换为
int
类型
pub fn (n Number) int() int
- 转为16进制字符串
pub fn (n Number) hexstr() string
- 计算商和余数
pub fn divmod(a &Number,b &Number,c &Number) Number
这个函数的参数是三个Number
对象的指针,功能是求a
和b
的商,c
为接收商数值,返回值是余数。下面是简单的测试用例:
import bignum
fn main(){
a:=bignum.from_int(5)
b:=bignum.from_int(3)
c:=bignum.new_bignum()
d:=bignum.divmod(&a,&b,&c)
println(a.int())
println(b.int())
println(c.int())
println(d.int())
}
编译运行结果如下:
5
3
1
2
- 判断两个值是否相等
pub fn cmp(a Number,b Number) int
判断两个值是否相等,相等的话返回0,不相等返回1。
- 检测是否为0
pub fn (n Number) is_zero() bool
- 自增
pub fn (n mut Number) inc()
- 自减
pub fn (n mut Number) dec()
- 幂函数
pub fn pow(a Number,b Number) Number
- 平方根
pub fn (n Number) isqrt() Number
and
运算
pub fn b_and(a Number, b Number) Number
or
运算
pub fn b_or(a Number, b Number) Number
xor
运算
pub fn b_xor(a Number, b Number) Number
- 左移
pub fn (a Number) lshift(nbits int) Number
- 右移
pub fn (a Number) rshift(nbits int) Number
- 克隆
pub fn (a Number) clone() Number
- 阶乘运算
pub fn factorial(n Number) Number
以上内容针对V语言0.1.24
版本,如有疏漏,还请指正。