C# 左位移位255(作为字节)

C# 左位移位255(作为字节),c#,bit-manipulation,bit-shift,C#,Bit Manipulation,Bit Shift,有人能解释一下为什么下面的代码不能编译吗 byte b = 255 << 1 类型转换把我难住了。255你试过铸造它吗 255 << 1 byte b = (byte)(255 << 1) 由于未选中该值,因此该值被截断为预期值254。因此,这是有可能做到这一点与演员 将255移位1位,然后尝试将其分配给一个字节。 255C#中的数字文字是int,而不是byte(位移位将由编译器计算,因此只剩下510位)。因此,您试图为不合适的字节分配一个值。您可以使用

有人能解释一下为什么下面的代码不能编译吗

byte b = 255 << 1

类型转换把我难住了。

255你试过铸造它吗

255 << 1
byte b = (byte)(255 << 1)

由于未选中该值
,因此该值被截断为预期值254。因此,这是有可能做到这一点与演员

将255移位1位,然后尝试将其分配给一个字节。
255C#中的数字文字是
int
,而不是
byte
(位移位将由编译器计算,因此只剩下510位)。因此,您试图为不合适的
字节分配一个值。您可以使用255进行遮罩:

byte b = (255 << 1) & 0xFF

byte b=0xff&(255这是
的结果,因为您可能是指(byte)(255 try:byte b=(255强制转换不是所有问题的解决方案;)我删除了我的(-1),因为如果用“unchecked”包装,这将起作用。我不确定为什么我认为255会存储为8位井,255适合,上面的一切都不适合:)需要注意的是,我是从另一个线程推到这里的,即使你有两个字节,对它们的任何按位操作都会返回一个int。愚蠢的问题,为什么你要使用255的十六进制表示而不是仅仅使用255?@Sir:当使用数字作为位掩码时的习惯。如果你是
 -ing或
 -使用一个数字,您不关心它的十进制表示;您希望立即看到设置了哪些位,哪些位没有设置。
unchecked
{
    byte b = (byte)(255 << 1);
}
byte b = (255 << 1) & 0xFF
byte b = unchecked((byte)(255 << 1));
byte b = 0xff & (255 << 1);
Byte b = unchecked((Byte)(255 << 1));
byte b = 255 << 1 & 0xff;