位运算符号&
2016-01-10 11:37
211 查看
今天用md5时用到这个,看到网上有好多讲解,不过都讲的很迷糊,不是没讲明白,而是理解起来容易迷糊,我直接说我的理解
&取两边二进制数,当两个操作数均为1时,返回该位结果为1
例如:6&13
6 的二进制为0110;
13的二进制位1101;
结果为4:0100;
实际运用:将byte[]转换为string
其中Bpawd就是需要转换的字节数组,这里的0xff二进制为11111111,int为32位,byte为8位,用&运算符表示只取该8位,其余填充0,如果不用该运算符,则其余24位将为1.
其中if(var < 16)sb.append("0")的原因是:
sb中添加的是十六进制数,当val小于16时(二进制16:10000)其位数只有四位,而十六进制是两位为一位,故需在val前加上0来填充。
&取两边二进制数,当两个操作数均为1时,返回该位结果为1
例如:6&13
6 的二进制为0110;
13的二进制位1101;
结果为4:0100;
实际运用:将byte[]转换为string
StringBuffer sb = new StringBuffer(); for(byte pawd:Bpawd){ int val = ((int)pawd) & 0xff; if(val < 16) sb.append("0"); sb.append(Integer.toHexString(val)); }
其中Bpawd就是需要转换的字节数组,这里的0xff二进制为11111111,int为32位,byte为8位,用&运算符表示只取该8位,其余填充0,如果不用该运算符,则其余24位将为1.
其中if(var < 16)sb.append("0")的原因是:
sb中添加的是十六进制数,当val小于16时(二进制16:10000)其位数只有四位,而十六进制是两位为一位,故需在val前加上0来填充。
相关文章推荐
- 编译APR包的时候出现 rm: cannot remove `libtoolT': No such file or directory
- 电脑课脱离老师控制
- window8.1下python 开发环境搭建和遇到的问题
- Python之reload流程
- POI 操作Excel表格系列2 --- 读取Excel表格
- 实践干货!猿题库 iOS 客户端架构设计
- LeetCode - Binary Tree Level Order Traversal II
- 有关网络包长度与校验和的研究
- 简单密码解码
- NSURLSession的强引用问题
- <Android Studio实用指南>8.16 提炼参数对象
- 遍历hashMap
- 傅立叶级数动图
- 网站无法登陆
- 《Effective Modern C++》翻译--条款1: 理解模板类型推导
- 用JAVA编写汉诺塔程序
- (2-3)DateNode+小结HDFS
- adobe CC 2015 mac 版本全套破解方法(可在线更新或者离线更新)
- 《Effective Modern C++》翻译--条款1: 理解模板类型推导
- 小心SQL SERVER 2014新特性——基数评估引起一些性能问题