“(<<<<<<<<<><<><><><<>>>

时间:2014-08-21 21:20:17

标签: java

 public int getRGB(Object inData) {
     return (getAlpha(inData) << 24)
         | (getRed(inData) << 16)
         | (getGreen(inData) << 8)
         | (getBlue(inData) << 0);

 }

那么,这个返回语句实际上做了什么?四个整体被转移,但返回的是什么?

3 个答案:

答案 0 :(得分:9)

返回一个int,其第一个(MSB)字节是Alpha值,第二个字节是Red值,第三个字节是Green值,最后一个字节是Blue值。

 highest                              lowest
   bit                                 bit
    |--------|--------|--------|--------|
      Alpha     Red      Green    Blue
     (8 bits) (8 bits) (8 bits) (8 bits)

答案 1 :(得分:4)

您得到的是以下内容:

Alpha |红色|绿色|蓝色 - 32位ARGB值 - 每个值8位。正如您所看到的,alpha向左移位24位(最左侧 - 最高位),之后是红色,有8位,因此在第二个前8位置为红色并屏蔽剩余的16位。之后,绿色被移位使用8位,屏蔽最后一个字节,最后将蓝色放在其位置。

答案 2 :(得分:0)

|是严格评估的按位OR,与||形成对比,只要一个表达式返回true,就可以停止评估条件中的语句。但是这些方法(可能)返回整数,所以在Java中你(据我所知)无法直接对true进行测试。没问题,因为那不是你正在做的事情 - 你正在从方法中移动单个结果,用0填充新位并切断旧位。这实现了在组成整数的4个字节之一中打包(可能)最多字节大小的正值(0到255)。本质上,这是打包4条信息,每条信息需要一个字节到一个整数类型的变量。目标变量的类型可以是任何东西,只要它有足够的字节来存储信息,但它从那里变得更加草率和疑问。