Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何对Double进行位补码并对其求反?_Swift - Fatal编程技术网

Swift 如何对Double进行位补码并对其求反?

Swift 如何对Double进行位补码并对其求反?,swift,Swift,如何在Swift 4中对双精度的位补码求反 特别是,我正在尝试将以下(trvial)javascript行转换为Swift: var j = -~(0.707 * x); 按原样使用它会给出错误消息“一元运算符不能并置;将内部表达式括起来” 好吧,我也不喜欢那样。所以,我试着: var j = -(~(0.707 * x)) //Compile error: "Unary operator '~' cannot be applied to an operand of type 'Double

如何在Swift 4中对双精度的位补码求反

特别是,我正在尝试将以下(trvial)javascript行转换为Swift:

var j = -~(0.707 * x);
按原样使用它会给出错误消息“一元运算符不能并置;将内部表达式括起来”

好吧,我也不喜欢那样。所以,我试着:

var j = -(~(0.707 * x))  //Compile error: "Unary operator '~' cannot be applied to an operand of type 'Double'".
然后:

然后:

var j = -Int64(~((0.707 * x).bitPattern)))
它进行编译,但由于“致命错误:没有足够的位来表示有符号的值”而崩溃


最后,我发现自己在牺牲一只冷冻鸡的时候,自己站在头上揉肚子,在路易斯安那买的一个洋娃娃上插别针。

我想没那么复杂:

Swift

var result = -Double(bitPattern:~(0.707 * 10.0).bitPattern) // replace 10.0 with x
var j = -~(0.707 * x);
Javascript

var result = -Double(bitPattern:~(0.707 * 10.0).bitPattern) // replace 10.0 with x
var j = -~(0.707 * x);
我认为最重要的是从
bitPattern
Double
的“回溯”,如果你错过了这一部分,你可能不仅有编译问题,还有语义问题;你可能会猜到你是以10为基数操作的,而你是以10为基数和以2为基数混合操作的


编辑:

正如Martin所说,JS隐式截断,因此尽管上述结果不匹配,但我认为使用
bitPattern
的Swift解决方案是最正确的JavaScript隐式截断一个数字到下一个整数值 在应用按位not运算符之前向零移动
~

console.log(-12.34))//13

log(-12.34))/-11
我总是喜欢理解发生了什么,但我必须承认,我被javascript代码弄糊涂了。所以,如果我没弄错的话,对于正x,它所做的只是取整然后截断?@Greg:差不多。它向下截断(接近零),然后加1。例如,对于所有数字5.0、5.1、5.99,结果为6(截断为5,然后为+1)。对于所有的数字-4.0,-4.1,-4.99,结果是-3(截断为-4,然后是+1)。是的,我说错了。非常有趣!为什么javascript行不能像上面的第二行那样编写?Greg:使用
~
似乎是一种截断double的方法,它比
Math.floor()更快。我不是JavaScript专家,所以我无法判断这是否“好”如果您提供更多信息(该代码来自何处,用于何处?),那么我们可能会想出如何在Swift中正确执行相同操作。谢谢您,Martin。没什么大不了的,我只是好奇而已。我也一直在尝试优化东西,但我不会为此烦恼,因为它只会偶尔运行一次。非常感谢您的帮助和澄清!