根据ECMAScript 5.1标准的第11.4.8小节:
生产UnaryExpression:~ UnaryExpression的计算方法如下:
- 让我们
expr来评估UnaryExpression.- 我们
oldValue是ToInt32(GetValue(expr)).- 返回应用按位补码的结果
oldValue.结果是带符号的32位整数.
所述~操作者将调用内部方法ToInt32.在我的理解中ToInt32(1),ToInt32(-1)将返回相同的值1,但为什么~-1等于0且~1等于-2?
现在我的问题是为什么ToInt32(-1)等于-1?ECMAScript 5.1标准的第9.5小节:
抽象操作ToInt32将其参数转换为-2 31到2 31 -1 范围内的2 32个整数值之一.这个抽象操作的功能如下:
- 设number是在输入参数上调用ToNumber的结果.
- 如果number为NaN,+ 0,-0,+∞或-∞,则返回+0.
- 让posInt为sign(number)*floor(abs(number)).
- 设int32bit为posInt modulo 2 32 ; 也就是说,具有正号并且幅度小于2 32的数字类型的有限整数值k 使得posInt和k的数学差异在数学上是2 32的整数倍.
- 如果int32bit大于或等于2 31,则返回int32bit - 2 32,否则返回int32bit.
当参数为-1时,根据9.5,在步骤1中数字仍为-1,跳过步骤3中的步骤2 posInt将在步骤4中为-1,int32bit将在步骤5中为1,它将返回1
哪一步错了?
在这种情况下,百分比是指什么?
int myInt = 27 % 10;
myInt = 7;
Run Code Online (Sandbox Code Playgroud)
%这段代码的意思是什么?