Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
C# “与”的区别是什么;1<&书信电报;x";及;pow(2,x)“;?_C#_Unity3d_Math_Comparison_Bit Manipulation - Fatal编程技术网

C# “与”的区别是什么;1<&书信电报;x";及;pow(2,x)“;?

C# “与”的区别是什么;1<&书信电报;x";及;pow(2,x)“;?,c#,unity3d,math,comparison,bit-manipulation,C#,Unity3d,Math,Comparison,Bit Manipulation,所以,在使用Unity时,我必须使用位运算符。现在,请不要误会我的意思,我完全了解位运算符的用处,在某些情况下,如果不生成一堆难看的代码,它是无法替换的。问题更像是。。。a和b的区别是什么,这里: double a = 1 << 3; double b = Math.Pow(2, 3); double a=1一般来说,对于大多数语言: pow函数的效率可能较低,因为它基本上是通用的,可以将任意数提升到任意幂次,因此无法在特殊情况下轻松优化 位移位将直接映射到处理器级操作 在某些语言

所以,在使用Unity时,我必须使用位运算符。现在,请不要误会我的意思,我完全了解位运算符的用处,在某些情况下,如果不生成一堆难看的代码,它是无法替换的。问题更像是。。。a和b的区别是什么,这里:

double a = 1 << 3;
double b = Math.Pow(2, 3);

double a=1一般来说,对于大多数语言:

pow函数的效率可能较低,因为它基本上是通用的,可以将任意数提升到任意幂次,因此无法在特殊情况下轻松优化

位移位将直接映射到处理器级操作

在某些语言中,编译器会看到操作有一个恒定的结果,并使用该结果,但是如果复杂度稍高,则可能会错过优化

是什么阻止任何人在逐位运算符上使用Math.pow? 它真的会改变什么吗

有几件事:


  • (int)Math.Pow(2,y)的可读性不如
    1精细。。。假设我不是个傻瓜,忘记了那个细节。。。为清晰起见。<代码> 1原则上考虑<代码> In .Max值,并且考虑该示例,没有什么可以阻止智能编译器为两者生成相同的代码。然而,实际的编译器所做的可能没有那么聪明。一个更有趣的例子可能是查看函数
    double-pow2(int n){return Math.Pow(2,n);}
    以查看生成了什么代码。当使用大于2**53的较大数字时,使用BigInt和使用bitshift(因为Math.Pow不支持BigInt)更好/更安全。我理解这种差异,是的。但是我想看看如果我需要让我的代码对那些不太高级的人更清晰,并且可能对学习感兴趣的人来说,我是否可以使用Math.Pow()版本。如果你需要说清楚的话,就用评论。你的第一点完全是主观的。
    // y >= 0
    int result = unchecked((int) (Math.Pow(2, y % 32) + 0.5));