Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无符号短字符上的左移位,不溢出为整数_C#_Bit Manipulation_Overflow_Bit Shift - Fatal编程技术网

C# 无符号短字符上的左移位,不溢出为整数

C# 无符号短字符上的左移位,不溢出为整数,c#,bit-manipulation,overflow,bit-shift,C#,Bit Manipulation,Overflow,Bit Shift,如果我有一个ushort变量,它是0xFFAA,我会用8位左移,我会得到一个整数,而不是一个无符号的短整数,为什么? 下面是一张让你更清楚的图片,我的意思是: 有没有一种方法可以在不将int转换为无符号短字符的情况下从左移位获取16位变量?如果要确保只设置变量的较低16位,可以使用逻辑AND使用0xFFFF屏蔽: var supposed = (test << 8) & 0xFFFF; var=(测试可能与UINT不是CLS的一部分有关?UInt16类型不符合CLS。符合

如果我有一个ushort变量,它是0xFFAA,我会用8位左移,我会得到一个整数,而不是一个无符号的短整数,为什么? 下面是一张让你更清楚的图片,我的意思是:


有没有一种方法可以在不将int转换为无符号短字符的情况下从左移位获取16位变量?

如果要确保只设置变量的较低16位,可以使用逻辑AND使用
0xFFFF
屏蔽:

var supposed = (test << 8) & 0xFFFF;

var=(测试可能与UINT不是CLS的一部分有关?
UInt16类型不符合CLS。符合CLS的替代类型是Int32。Int16可以用来替换范围从零到最大值的UInt16值。有关CLS符合性的更多信息,请参阅公共语言规范。
test
在这里不是一个ushort;它是一个
int
var
用整型常量键入总是会得到
int
。即使没有C#的轮班升级规则,也没有理由期望输出
ushort
。如果我用ushort而不是var,也会发生同样的情况。这是一个与你问的问题不同的问题,并且答案很简单,来自C#的类型提升规则。
u的输出说明了我混淆的原因很简单。我来自低级编程。如果我左移到寄存器中,问题不会出现,字节(在我的示例中为0xFF)将被“删除”。因此,您的cow示例不在这里,因为您可以执行我解释的操作,而无需在低级别进行强制转换。但您回答了我的问题,原因是C#。谢谢,您的解决方案是aspected。您可以告诉我,为什么我的方法不按预期工作吗?正如用户5090812所述,test是一个int,因此将其向上移动8位会得到0x00FFAA00。指定具有4位数字的十六进制常量值不会使测试成为ushort。