Java byte类型数据无法表示0xff的问题

开发环境(蓝色粗体字为特别注意内容)
1、软件环境: Win7 Ultimate sp1、jdk7u45
2、参考文献:https://www.cnblogs.com/jack1208-rose0203/p/5713210.html


  private static final byte[] ARRAY_CIRCLE = {
            0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c, //每一帧中左边眼睛数据
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c};//每一帧中右边眼睛数据};
提示报错,按照参考文献的提示,其实是可以表示的,但是需要做一下换算。具体需要做怎么样的换算,这得从计算机中二进制的表示方式说起。
1)计算机中,二进制补码最高位为符号位,0表示正数,1表示负数

+21,其二进制表示形式是00010101,则其补码同样为00010101
-21,按照概念其绝对值为00010101,各位取反为11101010,再加1为11101011,即-21的二进制表示形式为11101011

2)最大正数是01111111(正数补码为本身,即127),(最大的负数是11111111,即-1)
3)最小负数的补码表示形式是10000000(高位为1,负号,-128),我们把补码计算步骤倒过来就即可。10000000减1得01111111然后取反10000000
最终改成如下形式即可
  private static final byte[] ARRAY_CIRCLE = {
            0x3c, 0x7e, -1/*0xff*/, -1/*0xff*/, -1/*0xff*/, -1/*0xff*/, 0x7e, 0x3c, //每一帧中左边眼睛数据
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x3c, 0x7e, -1/*0xff*/, -1/*0xff*/, -1/*0xff*/, -1/*0xff*/, 0x7e, 0x3c};//每一帧中右边眼睛数据};

你可能感兴趣的:(Java byte类型数据无法表示0xff的问题)