JavaScript数值

JavaScript数值

位运算

javascript的位运算都会被默认转为有符号的32位整型,超过32位的整数会被截断,而小数部分则会被直接舍弃。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

按位与(&)

只有两个数的值为1时,才返回1。

            0001
         &  0011
        ---------
            0001

可以用一个数和1进行按位&运算判断奇偶数。

function assert(n) {
if (n & 1) {
  console.log("n是奇数");
} else {
  console.log("n是偶数");
}
}
assert(3); // "n是奇数"

//过程如下:

1 = 0001
3 = 0011
--------
& = 0001

按位或(|)

只要两个数中有一个数为1,结果就为1。

浮动数不支持位运算,进行位运算会先转成整数,可以用来求整。

var num = 1.1 | 0; // 1

按位非(~)

有符号的32位二进制的最高位也就是第一位数字代表着正负,1代表负数,0代表整数。

var num = 1; // 二进制 00000000000000000000000000000001
var num1 = ~num; // 二进制 11111111111111111111111111111110

按位异或(^)

按位异或是两个数中只有一个1时返回1,其他情况返回0。

            0001
         ^  0011
        ---------
            0010

有符号右移(>>)

有符号右移会将32位二进制数的所有位向右移动指定位数。

var num = 64; // 二进制1000000
num = num >> 5; // 二进制10,十进制2

相当于除以2五次。

有符号左移(<<)

有符号左移会将32位二进制数的所有位向左移动指定位数。

var num = 2; // 二进制10
num = num << 5; // 二进制1000000,十进制64

相当于乘以2五次。

进制转换

toString函数将一个十进制的数转换为一个其他进制数。 第一个参数是原十进制数,第二个是要转换的数的基数。

(30).toString(); // "30"
(30).toString(10); // "30"
(30).toString(16); // "1e" 十六进制
(30).toString(2); // "11110" 二进制
(30).toString(36); // "u" 36是允许的最大参数值

parseInt函数将其他进制数字转换为十进制。 第一个参数为要转换的数值,只能是整数;第二个是这个数值的基数。

parseInt("30"); // "30"
parseInt("30", 10); // "30"
parseInt("1e", 16); // "30"
parseInt("11110", 2); // "30"
parseInt("u", 36); // "30"

Last updated