V语言BitField(位域)模块介绍

  V语言中文网  |   1177 |    2019-09-21 13:03:08

目前Vlang已经更新到v0.1.20,命令行执行v up即可更新。

更新详情请点击查看: V语言更新日志

Vlang 近期新增了bitfield模块,用来操作二进制、位操作等。

话不多说,放码过来。

import bitfield
import rand
import time
 
// 初始化
fn bf_new_size(){
  instance:=bitfield.new(75)
  assert instance.getsize() == 75  // true
}
 
// set clear toggle get
fn bf_set_clear_toggle_get(){
  mut instance:=bitfield.new(75)
  instance.setbit(47)
  assert instance.getbit(47) == 1 // true
  instance.clearbit(47)
  assert instance.getbit(47) == 0 // true
  instance.togglebit(47)
  assert instance.getbit(47) == 1 // true
}
 
// and not or xor
fn bf_and_not_or_xor() {
	rand.seed(time.now().uni)
	len := 80
	mut input1 := bitfield.new(len)
	mut input2 := bitfield.new(len)
	mut i := 0
	for i < len {
		if rand.next(2) == 1 {
			input1.setbit(i)
		}
		if rand.next(2) == 1{
			input2.setbit(i)
		}
		i++
	}
	output1 := bitfield.bfxor(input1, input2)
	bfand := bitfield.bfand(input1, input2)
	bfor := bitfield.bfor(input1, input2)
	bfnot := bitfield.bfnot(bfand)
	output2 := bitfield.bfand(bfor, bfnot)
	mut result := 1
	for i < len {
		if output1.getbit(i) != output2.getbit(i) {result = 0}
	}
	assert result == 1
}
 
// clone cmp(compare)
fn bf_clone_cmp() {
	rand.seed(time.now().uni)
	len := 80
	mut input := bitfield.new(len)
	for i := 0; i < len; i++ {
		if rand.next(2) == 1 {
			input.setbit(i)
		}
	}
	output := bitfield.clone(input)
	assert output.getsize() == len
	assert bitfield.cmp(input, output) == true
}


更多Vlang bitfield操作可参考bitfield模块源码:V语言bitfield(位域)

代码如有疏漏,欢迎指正。


登陆后可发表评论


热门评论

暂无评论


最新评论

暂无评论