谁能解释为什么以下内容无法编译?
byte b = 255 << 1
错误:
常量值“510”无法转换为“字节”
我期待二进制的以下内容:
1111 1110
类型转换难倒了我。
C# 中的数字文字是int
, not byte
(编译器将评估位移位,因此仅保留 510)。因此,您尝试将值分配给byte
这不合适。您可以使用 255 进行掩码:
byte b = (255 << 1) & 0xFF
再次将结果减少到 8 位。与 Java 不同,C# 不允许溢出未被检测到。基本上,当尝试将 510 分配给一个字节时,您有两个明智的选择:要么限制在最大值,然后您将得到 255,要么丢弃不适合的位,在这种情况下您将得到 254。
您还可以使用unchecked
, as 拉塞夫克提到 https://stackoverflow.com/questions/737781/left-bit-shifting-255-as-a-byte/737810#737810:
byte b = unchecked((byte)(255 << 1));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)