打开短片最左边的位
原始问题已更改。
我想按位关闭 Short 值 (&H8000) 的最左边位,并保留其他位不变。
Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)
按位运算符有没有更短的方法?
当我这样做时,
Dim a = Short.MaxValue Or &H8000
我收到编译器错误,因为它会上升,而不是否定它。
Original question changed.
I want to bitwise turn off the left most bit of a Short value (&H8000) and leave the other bits as they are.
Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)
Isn't there any shorter way with bitwise operators?
When I do
Dim a = Short.MaxValue Or &H8000
I get a compiler error, cuz it goes up, instead of negating it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是因为 .NET 使用二进制补码,而不是带符号的大小。要求反,您必须翻转所有位,然后添加一位。
请仅使用一元减号。拜托...非常拜托。
编辑:如果出于某种奇怪的原因,您必须使用按位运算来执行此操作,则必须执行以下操作:
这当然仍然不是按位,因为不能使用按位运算符有效地完成二进制补数否定。
编辑2:这是一个一元减号:
编辑3:回应已编辑的问题:
That's because .NET uses two's complement, not signed magnitude. To negate, you have to flip all the bits and then add one.
Please just use the unary minus. Please...Pretty please.
EDIT: If for some strange reason you had to do this with bitwise operations, you would have to do this:
which of course is still not bitwise because two's complement negation cannot be done efficiently with bitwise operators.
EDIT2: And here's an unary minus:
EDIT3: In response to edited question:
二进制补码
更改最高有效位
Two's complement
Change most significant bit