jac*_*t9p 8 c# casting bit-shift
我有一个高字节和一个低字节我想转换为短.
我已经实现了这个,这似乎有效,但我对它的原因有点困惑.双方high_byte并low_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中很重要,但是如果我能在任何地方找到它的话,我会受到打击)