猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
~(“双倾斜”)在Javascript中做什么?
今天我正在看一个网络游戏物理图书馆,偶然发现了~操作员。我知道,一个~是一个按位计算的不,这会使~一个不,这将返回相同的价值,不是吗?
青春有我
浏览 365
回答 3
3回答
神不在的星期二
它删除小数点之后的所有内容,因为按位运算符隐式地将其操作数转换为有符号的32位整数。不管操作数是(浮点)数字还是字符串,结果都是数字。换句话说,它产生了:function(x) { if(x < 0) return Math.ceil(x); else return Math.floor(x);}只有当x在-(231)和231-1.否则会发生溢出,数字将“环绕”。这对于将函数的字符串参数转换为数字可能是有用的,但由于存在溢出的可能性,而且与非整数一起使用是不正确的,因此,除了“代码高尔夫球”之外,我不会那样使用它(E.在牺牲可读性和健壮性的情况下,毫无意义地从程序源代码中删除字节)。我会用+x或Number(x)相反。这是不可能的例如,数字-43.2是:-43.210 = 111111111111111111111111110101012作为一个有符号的(两个补码)32位二进制数。(JavaScript忽略了小数点之后的内容。)将BIT倒置给:非-4310 = 000000000000000000000000001010102 = 4210再倒转:不是4210 = 111111111111111111111111110101012 = -4310这与Math.floor(-43.2)在这个负数四舍五入为零,而不是远离它。(无论数字是正数还是负数,地板函数(等于-44)总是向下舍入下一个较低的整数。)
0
0
0
素胚勾勒不出你
第一个~运算符强制操作数为整数(可能在将值强制为字符串或布尔值之后),然后将最低的31位反转。据官方说法,ECMAScript数字都是浮点数,但有些数字在SpiderMonkey引擎中被实现为31位整数。您可以使用它将一个1元素数组转换为整数。浮点数是按照C规则转换的,即.小数部分的截断。然后,第二个~运算符将位反转回来,因此您知道您将有一个整数。这与在条件语句中强制将值强制为布尔值不同,因为空对象{}的计算结果为true,而~{}的计算结果为false。js>~~"yes"0js>~~33js>~~"yes"0js>~~false0js>~~""0js>~~true1js>~~"3"3js>~~{}0js>~~{a:2}0js>~~[2]2js>~~[2,3]0js>~~{toString: function() {return 4}}4js>~~NaN0js>~~[4.5]4js>~~5.65js>~~-5.6-5
0
0
0
慕哥6287543
在ECMAScript 6中,相当于~~是马蒂-特朗:通过删除任何小数返回数字的整数部分。它不舍得任何数字。Math.trunc(13.37) // 13Math.trunc(42.84) // 42Math.trunc(0.123) // 0Math.trunc(-0.123) // -0Math.trunc("-1.123")// -1Math.trunc(NaN) // NaNMath.trunc("foo") // NaNMath.trunc() // NaN填充物:function trunc(x) { return x < 0 ? Math.ceil(x) : Math.floor(x);}
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续