Public Domain
跨平台
JavaScript

软件简介

u128.js 是一个提供 128 位无符号整数运算的 JavaScript 库,旨在兼容各种主流浏览器。

示例代码:

<script type="text/javascript" src="u128.js" ></script>  
<script type="text/javascript">

        /*  
        Namespace shorthand  
        */  
        var u = faultylabs.u128;

        /*  
        Conversions to/from hex string:  
        */  
        var a    = u.hexval("000000bbaaaaaaaa33333333ffffffff")  
        var astr = u.hex$(a)  
        alert( astr == "000000bbaaaaaaaa33333333ffffffff" )

        /*  
        Addition a + b  
        */  
        var a = u.hexval("1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")  
        var b = u.hexval("0000000000000000000000000000001")  
        var c = u.add(a, b)  
        alert(u.hex$(c) == "02000000000000000000000000000000")

        /*  
        Subtraction a - b  
        */  
        var a = u.hexval("b0000000000000000000000000000000")  
        var b = u.hexval("00000000000000000000000000000001")  
        var c = u.sub(a, b)  
        alert(u.hex$(c) == "afffffffffffffffffffffffffffffff")

        /*  
        Multiplication a * b  
        */  
        var a = u.hexval("78cd2bbafbd21e3")   
        var b = u.hexval("de36a45d123b885")   
        var c = u.mul(a, b)  
        alert(u.hex$(c) == "0068dbb4c2baf8856f0df18732a6c2ef")

        /*  
        Quotient a / b  
        */  
        var a = u.hexval("0068dbb4c2baf8856f0df18732a6c2ef")   
        var b = u.hexval("de36a45d123b885")   
        var c = u.div(a, b)  
        alert(u.hex$(c) == "0000000000000000078cd2bbafbd21e3")

        /*  
        Remainder a % b  
        */  
        var a = u.hexval("00000521aaaaaaa76666666bfffffff9")   
        var b = u.hexval("00000521aaaaaaa00000000000000000")   
        var c = u.mod(a, b)  
        alert(u.hex$(c) == "00000000000000076666666bfffffff9")

        /* Comparison of a and b  
          0 -> a == b  
          1 -> a > b  
         -1 -> a < b  
        */  
        var a = u.hexval("de36a45d123b885")   
        var b = u.hexval("68dbb4c2baf8856f0df18732a6c2ef")   
        var cmp = u.cmp(a, b)  
        alert(cmp == -1)

        /*  
        Binary AND  a & b  
        Binary OR   a | b  
        Binary XOR  a ^ b  
        Binary NOT  ~a  
        */  
        var v55  = u.hexval("55555555555555555555555555555555")   
        var vAA  = u.hexval("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")   
        var vFF  = u.hexval("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")   
        var vOR  = u.or (v55, vAA)  
        var vAND = u.and(vFF, v55)  
        var vXOR = u.xor(vFF, v55)  
        var vNOT = u.not(v55)  
        alert(u.hex$(vOR)  == "ffffffffffffffffffffffffffffffff")  
        alert(u.hex$(vAND) == "55555555555555555555555555555555")  
        alert(u.hex$(vXOR) == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")  
        alert(u.hex$(vNOT) == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")

        /*  
        Left shift  
        */  
        var a  = u.hexval("00BBAAAAAAAA33333333FFFFFFFF")  
        var la = u.shl(a, 8)  
        alert(u.hex$(la) == "0000bbaaaaaaaa33333333ffffffff00")

        /*  
        Right shift  
        */  
        var a  = u.hexval("0000BBAAAAAAAA33333333FFFFFFFF11")  
        var ra = u.shr(a, 8)  
        alert(u.hex$(ra) == "000000bbaaaaaaaa33333333ffffffff")

        /*  
        Bit test  
        */  
        var a   = u.hexval("10000000000000000000000")  
        var bit = u.btest(a, 88)  
        alert(bit == 1)

        /*  
        Shortcuts for the values 1 and 0  
        */  
        var a   = u.zero()  
        var b   = u.one()  
        alert(   
                u.hex$(a) == "00000000000000000000000000000000" &&  
                u.hex$(b) == "00000000000000000000000000000001"  
        )

</script>