使用左移将两个字节组合成短路

jac*_*t9p 8 c# casting bit-shift

我有一个高字节和一个低字节我想转换为短.

我已经实现了这个,这似乎有效,但我对它的原因有点困惑.双方high_bytelow_byte铸造成byte秒.

short word = (short)(high_byte << 8 | low_byte);
Run Code Online (Sandbox Code Playgroud)

在这段代码中,应该high_byte << 8为零吗?然后我尝试了这个:

(byte)1 << 8
Run Code Online (Sandbox Code Playgroud)

等于256,我认为应该是0.我想我显然错过了一些东西.

有人可以解释一下吗?

Dam*_*ver 13

C#语言规范,第4.1.5节:

积分型一元和二元运算符始终以带符号的32位精度,无符号32位精度,带符号的64位精度或无符号64位精度运行:

...

对于二元<<>>运营商,左操作数转换为类型T,其中T是第一的int,uint,long,和ulong一个可以完全表示操作数的所有可能的值.然后使用类型的精度执行操作T,结果的类型是T.

也就是说,无论何时将任何运算符应用于C#中的整数类型,结果始终至少为32位....其他运算符还有其他规则(在其中给出),它们确切地定义了最终类型的确定方式.


(顺便说一句,我认为这在C#Reference中很重要,但是如果我能在任何地方找到它的话,我会受到打击)