解决方案 »

  1.   

    因为执行了左移位,相当于乘法,进位了,int型很可能会放不下,所以默认给你变成long型,你不想保留高位(溢出的部分)再自己强制转换
    否则默认给你按int型截断,你想保留高位,信息已经丢失,找不回来了
      

  2.   

    我猜的啊0xff000000这个是16进制,每一位对应二进制4位ff000000就是8个1,24个0总共32位(a&0xff000000)<<24再左移24位就有56位有效位了超过了int的4个字节,自动变成了long型C#的跨类型计算是网精度高的隐性转换char->int->long->double->string,所以逻辑或运算的结果取long型
      

  3.   

    你不想保留高位(溢出的部分)再自己强制转换
     否则默认给你按int型截断,你想保留高位,信息已经丢失,找不回来了 
    二楼的这部分怎么理解?
    假如按我上面写的强制转成int会丢失信息吗?(假如在变成long类型后的值,并没有超过Int的最大值)
      

  4.   

    如果没有超过int的最大值,只不过是丢失了一堆0而已
    编译器就是防止你移动的位数过多导致把1移到了前32位去而自己又不注意