估计是说bit吧 4bit一位 算一下的话应该是0xddddeeef的第一个e
位移用>> 与 ox0000f000 与一下

解决方案 »

  1.   

    优先级不同吧,A|B好像是先运算的.这要就有32Bit啦.再移12个bit,
      

  2.   

    搞不清楚,如果将a = a|b<<12;拆分成两句来执行得到的结果就和一句执行的结果不一样了。
    a = a|b<<12;--------->a = 0xdddd2eef;
    char c = b<<12;
    a = a|c;-------------->a = 0xdddd0eef;
    我猜测原因可能是a = a|b<<12;中包含了隐式转换,自动的将b升级为int了,所以才不会有错。
    如改成这样也能得到0xdddd2eef;
    int c = b<<12;
    a = a|c;