突然看到这个问题特意试了一下 
var a = ~~(-5.8);
alert(a); a = -5;var a = Math.floor(-5.8);
alert(a); a = -6;
所以。
~~这个符号到底干嘛用的???

解决方案 »

  1.   

    运行了你还不知道是什么用的,
    var a = ~~(-5.8); 取不小于当前数的整数。
    var a = Math.floor(-5.8);取不大于当前数的整数。
      

  2.   

    js中没有类型,所以没有整型和浮点型之分,没有32位整数和64位整数之分,但却保留了位运算,,,
    一切还要从数的机内表示法说起你懂的,就是所谓二进制这里只说整型的二进制表示法,姑且说16位整型吧(js中整数好像是int64的,再大的数就自动变成浮点型了)。
    额,突然思路断片了,记得是计算机导论课上讲的,让我想想....好吧,我觉得LZ可能不想看这些,但是,作为一个程序员,必须知道这些,虽然你是js程序员。Bingo!想起来了,继续:计算机表示一个有符号整数,内部约定最高位表示符号位,1表示负数,0表示正数。
    正数表示的数值,直接就是其转化为二进制的数值,负数的话,除最高位符号位,其他位取反+1就是其绝对值。对了,这个叫补码表示法。
    补码有个特点就是,各个位上的数取反+1就会得到其相反数。16位有符号数的表示范围是:-32768--32767.(1000000000000000--0111111111111111)
    再加上一个0,一共表示了65536(2^16)个数。煮个栗子:
    -1的二进制是:偶们用补码的特征,先写出1的二进制:0000000000000001 ,取反:1111111111111110 再加1:1111111111111111 .好了,16位的-1的二进制补码表示是16个1.1110100111110101补码表示的数是多少?先取反0001011000001010,再加1:0001011000001011,转化为10进制是5643,因此,1110100111110101补码表示的数诗-5643.
    ============================================================位运算中~,表示的是按位取反的意思,-1的二进制是16个1,按位取反就是16个0,也就是~-1=0.根据补码的特征:对一个整数按位取反再加1得到这个数的相反数;我们可以知道:
    ~X <==> -(X)-1这就是#2的理论为什么正确的原因。
    以上栗子为方便书写以16位为例,其他数位推广之。
    其他位运算,&按位与、|按位或、^按位异或、<<按位左移、>>按位右移,脑补一下,应该很好理解。