给了我一个11位带符号的十六进制值,该值必须存储在int32数据类型中。当我将十六进制值转换为int 32时,11位十六进制值显然比int32小,因此它的0填充了高阶位。
基本上,我需要能够从给定的11位十六进制值在int32或16中存储11位带符号的值。
例如。十六进制字符串= 0x7FF;
如果我使用Int.parse(hex,System.Globalization.Numbers.Hexvalue);将其强制转换为int32; 当它应该为-1时我得到2047(根据11位二进制文件111 1111)
如何在C#中完成此操作?
实际上非常简单,只需两班即可。向右移动可保留符号,因此很有用。为了使用它,11位事物的符号必须与int的符号对齐:
x <<= -11;
然后进行右移:
x >>= -11;
就这样。
-11(可能看起来很奇怪)只是写32-11的一种较短方法。这通常不是同一回事,但是移位计数被31(整数)或63(长)掩盖,因此在这种情况下,您可以使用该快捷方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句