C# 两个字节(8位十六进制)之间的按位操作在C中出错#

C# 两个字节(8位十六进制)之间的按位操作在C中出错#,c#,hex,byte,bitwise-operators,C#,Hex,Byte,Bitwise Operators,我在第2行和第3行的C#代码中遇到错误 byte Data = 0x00; Data = Data | 0x80; Data = Data >> 1; 编译器说:无法将类型“int”隐式转换为“byte”。存在显式转换(是否缺少强制转换?) 但是我在C中成功地运行了这段代码,将“Data”作为无符号字符 如何在C#中执行此操作 感谢您的帮助。请明确地像以下那样施展: byte Data = 0x00; Data = (byte)(Data | 0x80); Data = (byte

我在第2行和第3行的C#代码中遇到错误

byte Data = 0x00;
Data = Data | 0x80;
Data = Data >> 1;
编译器说:无法将类型“int”隐式转换为“byte”。存在显式转换(是否缺少强制转换?)

但是我在C中成功地运行了这段代码,将“Data”作为无符号字符

如何在C#中执行此操作


感谢您的帮助。

请明确地像以下那样施展:

byte Data = 0x00;
Data = (byte)(Data | 0x80);
Data = (byte)(Data >> 1);
或者将日期声明为int,并在末尾转换为byte(如果您确定它符合byte)


将其显式转换为:

byte Data = 0x00;
Data = (byte)(Data | 0x80);
Data = (byte)(Data >> 1);
或者将日期声明为int,并在末尾转换为byte(如果您确定它符合byte)


要防止转换为int,可以改用赋值运算符

byte Data = 0x00;
Data |= 0x80;
Data >>= 1; // result is 0x40

要防止转换为int,可以改用赋值运算符

byte Data = 0x00;
Data |= 0x80;
Data >>= 1; // result is 0x40

数据>>1
将是
int
类型,只需将其转换回
字节即可:
数据=(字节)(数据>>1)
数据>>1
将是
int
类型,只需将其转换回
字节即可:
数据=(字节)(数据>>1)我不明白为什么结果是64?我认为“数据或0x80”数据变成0x80,然后“数据右移1次”数据变成0x40。所以结果数据应该是0x40。我说的对吗?嗯,那是通用的数字格式。你说得对。我需要
ToString(“x”)
来获取十六进制值。我不明白为什么结果是64?我认为“数据或0x80”数据变成0x80,然后“数据右移1次”数据变成0x40。所以结果数据应该是0x40。我说的对吗?嗯,那是通用的数字格式。你说得对。我需要
ToString(“x”)
来获取十六进制值。