可能重复:
What is the tilde (~) in a C# enumeration?代字符在表达式中的含义是什么?
我发现下面的代码有点this MSDN页面上。
(((Width * Planes * BitCount + 31) & ~31)/8) * abs(Height)
这实际上确实在C#visual studio 2010中进行了编译。究竟是在号码31前面的代字号“〜”是什么?我从来没有在表达式中看过这个语法。
可能重复:
What is the tilde (~) in a C# enumeration?代字符在表达式中的含义是什么?
我发现下面的代码有点this MSDN页面上。
(((Width * Planes * BitCount + 31) & ~31)/8) * abs(Height)
这实际上确实在C#visual studio 2010中进行了编译。究竟是在号码31前面的代字号“〜”是什么?我从来没有在表达式中看过这个语法。
这是bitwise complement运营商,也被称为按位否定。
这是bitwise complement operator。
基本上,它翻转位:
0xffff0000 == ~0x0000ffff
在代码您已发布,做& ~31
确保最后5位是0(按位和11111的补体,其是00000的)。
~
- bitwise NOT operator,基本上以二进制格式位取反
31是11111,因此〜31 == 00000,基本为0
+1,因为这是最容易理解和最清晰的答案。 –
该示例不正确,因为前导零也被反转。即'〜31 =〜0x0000001F = 0xFFFFFFE0' – JimiLoe
这个例子不正确 31的二进制补码是00000000000000000000000000011111(十六进制是0000001F - 如果计算32位)并且“〜”运算符翻转这些位,所以答案将是11111111111111111111111111100000如果我们将它转换为十进制,答案是-32 如果64,31的二进制补码是0000000000000000000000000000000000000000000000000000000000011111和“〜”翻转位,这又是等同于-32。 AFAIK没有运行C#的6位个人电脑,为什么你错了。 如果有6位PC,这是正确的。 –
这是按位补运算符 - 它只是使所有0位到1秒反之亦然......见MSDN reference。
在特定情况下,它只是创建(31 = 0x1F
):
~0x1F = 0xFFFFFFE0
它是用来与bitwise and (&)
从而bascially它取消了最后5位。
〜31 = 31,在这种特定的情况下,按位否定是用来保持为零(Width * Planes * BitCount + 31)
第一(从LSB)的5位您谈谈您得心应手ISO/IEC 23270:2006 — Information technology — Programming languages — C#复制和转§ 14.6。神圣的写作4。在那里,你会发现:
14.6.4按位补运算符
对于应用〜X,一元运算符重载解析(§14.2.3)形式的操作来选择特定的运算实现。的操作数转换为参数类型所选择的操作者的,结果的类型是运营商的返回类型。预定义的按位补码运算符为:
int operator ~(int x) ;
uint operator ~(uint x) ;
long operator ~(long x) ;
ulong operator ~(ulong x) ;
对于这些运算符中的每一个,运算结果都是x的按位补数。
每个枚举类型E隐式提供下列按位求补运算符:
E operator ~(E x);
评估~x
,其中x
是枚举类型E
的具有基础类型U
表达式的结果,是完全一样评估unchecked((E)(~(U)x))
。当操作数类型是枚举类型E
(§14.2.3)时,此运算符仅由一元运算符重载分辨率考虑。
抬升(§14.2.7)上面定义的未提升预定按位求补运算符的形式也预先确定。
在你的情况~31
是一样的~ 0x0000001F
。 0x0000001F
的按位成分是0xFFFFFFE0
。为什么他们不会写出他们想要的真正的面具超出了我的想象。
它的按位补充。请参阅下面的链接。 [如何进行按位补运算符工作] [1] [1]:http://stackoverflow.com/questions/791328/how-does-the-bitwise-complement-operator-work – Nerdtron
对于未来的参考这里是c#操作符的列表。 [C#运营商](http://msdn.microsoft.com/en-us/library/6a71f45d.aspx) –