byte[] a = new byte[4];
      byte[] b = new byte[3]{0,0,0};
这句
      b[2] |= a[3] & 0x80; //符号位
通不过!!!
-------------------------
      b[2] |= (byte)(a[3] & (byte)0x80); //符号位
这样通过了,不过太搞笑了吧,请问高手该怎么办???
就是说进来简单,在C语言里面这是很简单的。

解决方案 »

  1.   

    0x80 系统默认是一个 int
    int 不能隐式转换为 byte。
    所以只能写              byte[] a = new byte[4];
                byte[] b = new byte[3] { 0, 0, 0 };            b[2] |= (byte)(a[3] & (byte)0x80);
      

  2.   

    有没用什么办法让  b[2] |= a[3] & 0x80;  这句通过,加unsafe,或在字节型常量后面加后缀等等?
    或加什么编译开关?
      

  3.   

    只能写成 
    b[2] |= (byte)(a[3] & 0x80);
      

  4.   

    C#成功就成功在这里了,这是类的安全性。
    C#中绝对不会出现if(a=1){;}所造成的错误。
      

  5.   

    C中虽然支持 y = ++x * x++ / z--;这样的写法
    但不鼓励这样写,这就是C的失败,它不鼓励这样写,还让这种语法可行。