Din*_*nah 13 .net c# bit-shift
我正在从单色位图中读取位.我short以相反的顺序将每16位存储在a 中.如果位图中的位为黑色,则存储1.如果为白色,则存储0.
例如:对于位图:bbbw bbbw bbbw wwww
我的简称是:0000 0111 0111 0111
我尝试这样做的第一种方式是:
short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
m |= short.MinValue;
m >>= 1;
// ...
Run Code Online (Sandbox Code Playgroud)
经过一次任务和班次后,我得到了预期的-32768(1000 0000 0000 0000).
第二次我得到-16384(1100 0000 0000 0000).
我更改了我的代码使用ushort并将if行更改为s |= (ushort)Math.Pow(2, 15);现在它的工作原理.
我的问题是:为什么标志位不会在.NET中转移?有没有办法改变标志位?
Rob*_*ino 31
在C#中,移位是算术移位(与逻辑移位相反).在正确的算术移位中,符号位在左侧移入,因此保留了数字的符号.右移相当于除以2:
![]()
如果您想要逻辑移位(无符号扩展名),请使用无符号数字:
![]()
http://msdn.microsoft.com/en-us/library/k2ay192e.aspx
">>"运算符将表达式1的位向右移动表达式2中指定的位数.表达式1的符号位用于填充左侧的数字.向右移位的数字将被丢弃.表达式1的数据类型确定此运算符返回的数据类型."
| 归档时间: |
|
| 查看次数: |
6973 次 |
| 最近记录: |