(j & 0xff) << 24 | i & 0xffffff 中的“0xff”和“0xffffff”起什么作用?不加结果也一样啊!

解决方案 »

  1.   

    i和j是什么类型啊?
    至少后面那个“0xffffff”不能说不加也一样吧。
      

  2.   

    高位补0
    如果是int的话应该就是0x000000ff和 0x00ffffff
      

  3.   

    “& 0xffffff”的结果是只保留最后24个bit呀,跟没有怎么会一样呢?
      

  4.   

    哦,明白了,我忽略了int是32位。
      

  5.   

    至于前面的“(j & 0xff) << 24”,如果j是int的话,的确跟j << 24的结果没什么区别。
    我想作者这么写要么是为了可读性(只取最后8bit的目的更加明显),要么是为了更放心吧。
    偶有时也会写类似的代码,比如忘记了“<<”是左移还是循环左移,又懒得查书,干粹就写“(j & 0xff) << 24”,怎么着都对,呵呵。
    当然,或许这样可扩展性也好,比如万一将来j需要改成long型了,结果还是对的。总之不是什么大问题,就别再钻牛角尖了。