美文网首页
原码、反码、补码

原码、反码、补码

作者: 陈陈_04d0 | 来源:发表于2020-11-19 09:43 被阅读0次

    二进制 1010 1001 十进制 169


    手动推算

     Integer.toBinaryString(mCheckSum) //int转为二进制

    原码:把最左边的一位腾出来表示正负,0 表示正数,1 表示负数

    负数:  1010 1001

    反码:正数的反码与其原码相同,负数的反码是符号位不变其他位取反   

    负数: 1101 0110

    补码:正数的补码与其原码相同,负数在反码的基础上 +1

    负数:1101 0111

    转换: 101 0111 16进制 57


    代码方式计算

    byte[] bytes = Convert.hexsStringToBytes("7F10020612");//转为数组

    int mCheckSum = ~Convert.byteSum(bytes) +1;//求和反码

    String.format("%04X", mCheckSum &0xFFFF) // 转为16进制补码

    /**

    * 十六进制String 转为byte 数组

    * @param hexString 值

    * @return

    */

    public static byte[]hexsStringToBytes(String hexString) {

    if (hexString ==null || hexString.equals("")) {

    return new byte[1024];

        }

    hexString = hexString.toUpperCase();

        int length = hexString.length() /2;

        char[] hexChars = hexString.toCharArray();

        byte[] d =new byte[length];

        for (int i =0; i < length; i++) {

    int pos = i *2;

            d[i] = (byte) (charToByte(hexChars[pos]) <<4 |charToByte(hexChars[pos +1]));

        }

    return d;

    }

    c

    相关文章

      网友评论

          本文标题:原码、反码、补码

          本文链接:https://www.haomeiwen.com/subject/hwlumktx.html