美文网首页
&0xFF是怎么个意思

&0xFF是怎么个意思

作者: 不知不怪 | 来源:发表于2018-08-17 16:10 被阅读0次

今天看了一下md5加密算法

private static String md5(String s) {
        MessageDigest algorithm = null;
        try {
            algorithm = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        algorithm.update(s.getBytes());
        byte[] hash = algorithm.digest();
        if (hash == null) {
            return null;
        }
        StringBuffer buf = new StringBuffer(hash.length * 2);
        for (int i = 0; i < hash.length; i++) {
            if ((hash[i] & 0xFF) < 0x10) {
                buf.append("0");
            }
            buf.append(Long.toString(hash[i] & 0xff, 16));
        }
        return buf.toString();
    }

我就很想知道hash[i] 后面的&0xFF到底是什么意思,就开始百度。
举个简单的例子:
byte[] b = new byte[5];
b[0] = -12;
byte 8位二进制 = 1个字节 char 2个字节 short (2个字节) int(4个字节) long(8个字节) float (4个字节) double(8个字节)
计算机存储数据机制:正数存储的二进制原码,负数存储的是二进制的补码。 补码是负数的绝对值反码加1。
比如-12,-12 的绝对值原码是:0000 1100 取反: 1111 0011 加1: 1111 0100
byte --> int 就是由8位变 32 位 高24位全部补1: 1111 1111 1111 1111 1111 1111 1111 0100 ;
0xFF 是计算机十六进制的表示: 0x就是代表十六进制,A B C D E F 分别代表10 11 12 13 14 15 F就是15 一个F 代表4位二进制:可以看做 是 8 4 2 1。
0xFF的二进制表示就是:1111 1111。 高24位补0:0000 0000 0000 0000 0000 0000 1111 1111;
-12的补码与0xFF 进行与(&)操作 最后就是0000 0000 0000 0000 0000 0000 1111 0100
转换为十进制就是 244。
byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保持二进制补码的一致性。
当byte要转化为int的时候,高的24位必然会补1,这样,其二进制补码其实已经不一致了,&0xff可以将高的24位置为0,低8位保持原样。这样做的目的就是为了保证二进制数据的一致性。

有人问为什么上面的式子中b[0]不是8位而是32位,因为当系统检测到byte可能会转化成int或者说byte与int类型进行运算的时候,就会将byte的内存空间高位补1(也就是按符号位补位)扩充到32位,再参与运算。
也就是说如果是负数时它的补码高位全都是1
详见: 原码 反码 补码 https://blog.csdn.net/Jason_M_Ho/article/details/78700434

相关文章

  • &0xFF是怎么个意思

    今天看了一下md5加密算法 我就很想知道hash[i] 后面的&0xFF到底是什么意思,就开始百度。举个简单的例子...

  • iOS & 0xff

    >bytes[i]& 0xff & 0xff 就是取低8位的意思 例如: 十进制: 300 十六进制:1001...

  • java思考题(一)

    这个& 0xFF是用来干嘛的 先打印a[0],在打印a[0]&0xff后的值,本来想结果应该都是-127.但是结果...

  • byte&0XFF的基础

    前言 最近在做代码相关的优化,找到了一个二进制转十六进制的方法: 为什么byte转int需要与0XFF 0XFF ...

  • 六号线晚报0528

    天气:晴 风力:微风 为什么要 & 0xFF byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保...

  • 意思是个啥意思?

    意,立日心,像太阳一样,思,田心,像大地一样。太阳,大地,太阳,大地就这么个意思吧。像一首歌,好像是这样唱的。哦!...

  • escape、encodeURI、encodeURICompon

    区别: escape vs (encodeURI && encodeURIComponent) 在处理0xff之外...

  • 关于复仇,上帝是怎么个意思呢?

    张扣扣的案子开审,关注的人很多,关于仇杀,思考的人也不少。上帝也不希望有这样的事发生,可是,既然已经发生了,应该...

  • “365"又是怎么个意思?

    我俩又被水果店里榴莲的味道勾住。爱人飞速走进水果店。我因为红包里没有那么多钱,怕店员让我们买而不买尴尬,就没...

  • &0xFF

    https://blog.csdn.net/xmc281141947/article/details/747400...

网友评论

      本文标题:&0xFF是怎么个意思

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