我有一个32位的整数,我想只访问这个变量的低16位。我知道可以将其转换为位数组和int16,但是否有更直接的方法?
我有一个32位的整数,我想只访问这个变量的低16位。我知道可以将其转换为位数组和int16,但是否有更直接的方法?
(Int16)my32BitInt
通常,如果您像这样扩展/截断位模式,则确实需要注意有符号类型 - 无符号类型可能会导致更少的意外情况。(UInt16)(my32BitInt & 0xffff)
& 0x7fff
,这只保留了15位。只需使用此函数
Convert.ToInt16()
(Int16)valueasint
checked
上下文中发生。在未经检查的上下文中,算术溢出被忽略并截断结果。 - HarrisonInt16
,例如:(Int16)2;
但是,在进行此操作时要小心。因为Int16
无法保存所有可能的Int32
值。
例如,以下操作将无法正常工作:
(Int16)2147483683;
Int16
最大只能容纳 32787
的值。您可以使用 unchecked (C# Reference)
关键字来处理这种情况。int r = 0xF000001;
short trimmed = unchecked((short) r);
这将截断r
的值以适应short类型。
如果r
的值始终应该适合一个short,您可以进行正常转换并让抛出异常。
int x = 0;
UInt16 value = (UInt16)x;
这个变量具有整数的完整(正)范围。
uint
和 ushort
的存在是有原因的。然后:ushort ret = (ushort)(val & ((1 << 16) - 1));