javascript ~~ 符号是什么意思呢?? 例如Array(~~(Math.random()*7));

2025-05-12 18:24:14
推荐回答(1个)
回答(1):

~ bitwise NOT 运算符

~对操作数按位取反,两个的意思即作两次取反操作,其实是等作原数本身(操作数是32整数范围内)


~~(Math.random()*7)

var n = Math.random() * 7;
n = ~n;
n = ~n;//其实和初始值一样

和对BOOLEAN类型的作两次!操作是一个意思,只不过是把小数位给去掉了。

推荐用>>操作符,一次即可:

var n = Math.random() * 7;
n = n>>0;


~运算符的详细解释:


将 expression 转换为一个 32 位带符号整数,然后按位对 1 求补。即,将结果中为 0 的每一位设置为 1,并将结果中为 1 的每一位设置为 0。结果是一个带符号的 32 位整数。此运算符也称为对一求补运算符或按位求补运算符。

例如,十六进制值 0x7777 表示为二进制数:


0111011101110111

该十六进制值 ~0x7777 的按位取反的二进制数为:


1000100010001000

在十六进制中,它是 0x8888。因此,~0x7777 就是 0x8888。


按位运算符的最常见用法是提供特征位(为每一位填充一个布尔值)。


浮点数通过舍去小数点后面的所有位来转换为整数。正整数可转换为无符号的十六进制值,其最大值为 4294967295 或
0xFFFFFFFF;转换大于最大值的值时,会舍去其最高有效位,因此该值仍保持为 32 位。负数通过 2
的补码标记转换为无符号的十六进制值,其最小值为 -2147483648 或 0x800000000;小于最小值的数可转换为精度更高的 2
的补码,然后舍去最高有效位。


由于结果被解释为 32 位 2 的补码数,因此结果将是 -2147483648 到 2147483647 范围中的一个整数。