V语言大数BIGNUM介绍

  V语言中文网  |   4616 |    2020-02-28 19:43:50

在我们平时开发遇到需要数字的场景中,大多数的情况i64或者u64这两个类型已经可以覆盖了,但是还有一些意外情况是需要更大更大的数字类型,这时候就需要BIGNUM类型了。

bignum在V语言中以全局模块(global module)的形式存在于源码vlib中,如需使用bignum模块,只要简单在文件中引入即可:

import bignum

V语言中bignum的类型定义为Number,在源码中可以看到该结构体,下面介绍下bignum模块中主要的一些方法。

  1. 初始化函数new_bignum()

pub fn new_bignum() Number

该函数返回一个空的Number对象

  1. int类型实例化

pub fn from_int(i int) Number

  1. u64类型实例化

pub fn from_u64(u u64) Number

  1. string类型实例化

pub fn from_string(s string) Number

  1. 转换为int类型

pub fn (n Number) int() int

  1. 转为16进制字符串

pub fn (n Number) hexstr() string

  1. 计算商和余数

pub fn divmod(a &Number,b &Number,c &Number) Number

这个函数的参数是三个Number对象的指针,功能是求ab的商,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
  1. 判断两个值是否相等

pub fn cmp(a Number,b Number) int

判断两个值是否相等,相等的话返回0,不相等返回1

  1. 检测是否为0

pub fn (n Number) is_zero() bool

  1. 自增

pub fn (n mut Number) inc()

  1. 自减

pub fn (n mut Number) dec()

  1. 幂函数

pub fn pow(a Number,b Number) Number

  1. 平方根

pub fn (n Number) isqrt() Number

  1. and运算

pub fn b_and(a Number, b Number) Number

  1. or运算

pub fn b_or(a Number, b Number) Number

  1. xor运算

pub fn b_xor(a Number, b Number) Number

  1. 左移

pub fn (a Number) lshift(nbits int) Number

  1. 右移

pub fn (a Number) rshift(nbits int) Number

  1. 克隆

pub fn (a Number) clone() Number

  1. 阶乘运算

pub fn factorial(n Number) Number

以上内容针对V语言0.1.24版本,如有疏漏,还请指正。


登陆后可发表评论


热门评论

暂无评论


最新评论

暂无评论