mirror of
https://github.com/inkarkat/vim-ingo-library.git
synced 2025-12-22 12:13:58 +01:00
68 lines
2.4 KiB
VimL
68 lines
2.4 KiB
VimL
" ingo/binary.vim: Functions for working with binary numbers.
|
|
"
|
|
" DEPENDENCIES:
|
|
" - nary.vim autoload script
|
|
"
|
|
" Copyright: (C) 2016-2017 Ingo Karkat
|
|
" The VIM LICENSE applies to this script; see ':help copyright'.
|
|
"
|
|
" Maintainer: Ingo Karkat <ingo@karkat.de>
|
|
"
|
|
" REVISION DATE REMARKS
|
|
" 1.030.002 14-May-2017 Generalize functions into ingo/nary.vim and
|
|
" delegate ingo#binary#...() functions to those.
|
|
" 1.029.001 28-Dec-2016 file creation
|
|
|
|
function! ingo#binary#FromNumber( number, ... )
|
|
"******************************************************************************
|
|
"* PURPOSE:
|
|
" Turn the integer a:number into a (little-endian) List of boolean values.
|
|
"* ASSUMPTIONS / PRECONDITIONS:
|
|
" None.
|
|
"* EFFECTS / POSTCONDITIONS:
|
|
" None.
|
|
"* INPUTS:
|
|
" a:number Positive integer.
|
|
" a:bitNum Optional number of bits to use. If specified and a:number cannot
|
|
" be represented by it, a exception is thrown. If a:bitNum is
|
|
" negative, only the lower bits will be returned. If omitted, the
|
|
" minimal amount of bits is used.
|
|
"* RETURN VALUES:
|
|
" List of [b0, b1, b2, ...] boolean values; lowest bits come first.
|
|
"******************************************************************************
|
|
return call('ingo#nary#FromNumber', [2, a:number] + a:000)
|
|
endfunction
|
|
function! ingo#binary#ToNumber( bits )
|
|
"******************************************************************************
|
|
"* PURPOSE:
|
|
" Turn the (little-endian) List of boolean values into a number.
|
|
"* ASSUMPTIONS / PRECONDITIONS:
|
|
" None.
|
|
"* EFFECTS / POSTCONDITIONS:
|
|
" None.
|
|
"* INPUTS:
|
|
" a:bits List of [b0, b1, b2, ...] boolean values; lowest bits come first.
|
|
"* RETURN VALUES:
|
|
" Positive integer represented by a:bits.
|
|
"******************************************************************************
|
|
return call('ingo#nary#ToNumber', [2, a:bits] + a:000)
|
|
endfunction
|
|
|
|
function! ingo#binary#BitsRequired( number )
|
|
"******************************************************************************
|
|
"* PURPOSE:
|
|
" Determine the number of bits required to represent a:number.
|
|
"* ASSUMPTIONS / PRECONDITIONS:
|
|
" None.
|
|
"* EFFECTS / POSTCONDITIONS:
|
|
" None.
|
|
"* INPUTS:
|
|
" a:number Positive integer.
|
|
"* RETURN VALUES:
|
|
" Number of bits required to represent numbers between 0 and a:number.
|
|
"******************************************************************************
|
|
return ingo#nary#ElementsRequired(2, a:number)
|
|
endfunction
|
|
|
|
" vim: set ts=8 sts=4 sw=4 noexpandtab ff=unix fdm=syntax :
|