Java 如何从int转换为byte,然后使用位移位运算符

Java 如何从int转换为byte,然后使用位移位运算符,java,casting,colors,binary,bit-shift,Java,Casting,Colors,Binary,Bit Shift,为什么下面的方法不起作用?我将一个int转换为一个字节,然后将位移位7。我看不出有什么问题 但是,我收到错误消息“可能丢失精度…必需:字节;找到:int” pixels是字节数组,c是彩色对象,iter是整数 pixels[iter++] = ((byte) c.getRed()) << 7; pixels[iter++] = ((byte) c.getGreen()) << 7; pixels[iter++] = ((byte) c.getBlue()) <<

为什么下面的方法不起作用?我将一个int转换为一个字节,然后将位移位7。我看不出有什么问题

但是,我收到错误消息“可能丢失精度…必需:字节;找到:int”

pixels
是字节数组,
c
是彩色对象,
iter
是整数

pixels[iter++] = ((byte) c.getRed()) << 7;
pixels[iter++] = ((byte) c.getGreen()) << 7;
pixels[iter++] = ((byte) c.getBlue()) << 7;

pixels[iter++]=((byte)c.getRed())在Java中,移位运算符返回一个
int
值,即使移位的数量是
byte
。您需要围绕整个表达式将强制转换为
byte

pixels[iter++] = (byte) (c.getRed() << 7);
pixels[iter++] = (byte) (c.getGreen() << 7);
pixels[iter++] = (byte) (c.getBlue() << 7);

pixels[iter++]=(byte)(c.getRed()在Java中,移位运算符返回一个
int
值,即使移位的数量是
byte
。您需要在整个表达式周围将强制转换为
byte

pixels[iter++] = (byte) (c.getRed() << 7);
pixels[iter++] = (byte) (c.getGreen() << 7);
pixels[iter++] = (byte) (c.getBlue() << 7);

像素[iter++]=(byte)(c.getRed()如何:
(byte)(c.getRed()如何:
(byte)(c.getRed()谢谢,我感觉它与运算符本身有关。你有一个额外的parens btw-应该是(c.getRed()@user1796994-谢谢;parens现在已修复。没有语法检查器进行剪切和粘贴的危险。:)谢谢,我感觉它与操作符本身有关。顺便说一句,你有一个额外的parens-应该是(c.getRed()@user1796994-谢谢;parens现在已修复。在没有语法检查器的情况下进行剪切和粘贴的危险。:)