`

为什么16进制数要与OxFF与运算

阅读更多
为什么16进制数要与OxFF与运算
以下是MD5加密算法示例,其中使用了 OxFF的与运算:
@Test
public void md5() throws Exception{
String pwd = "1234";
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bts = md.digest(pwd.getBytes());//16位
pwd = "";
for(byte bt : bts){
System.err.println("src: "+bt);
String str = Integer.toHexString(bt);
System.err.println("src:-----"+str);
str = Integer.toHexString(bt & 0xFF);//为儿在算MD5时为什么与要0xff进行与运算呢
System.err.println("dest:"+str);
if(str.length()<=1){
str+="f";
}
pwd+=str;
System.err.println("---------------------------------");
}
System.err.println("最后的密码是:"+pwd);
}
我们要讨论的主要问题是,为什么上面注解处要与OxFF进行与运算而不是其他值呢?
因为OxFF的16进制数为ffffffff (即8个f)。按与运算的法则,

先来看二进制的与运算,如:-1 & 1 = 1
-1(负1)的二进制编码为:   11111111     11111111    11111111   11111111   即一个32位的字符串,前面一位是1表示负数
1(正1) 的二进制编码为: 00000000    00000000   00000000  00000001   即,只有最后一位是1,其他部分全部为0
按&(与运算)的法则结果:  00000000    00000000   00000000   00000001  即,只有当两个都为1时才为1,所以最后的结果为:1(正1)

则可以知道为什么要与0xFF进行与运算,因为OxFF的16进行为 :000000FF。任意数与OxFF进行与运算都是取16进制的后两位
运算示例如下:
-127(负数127)的16进制为:   FFFFFF81
0xFF的16进制为:           000000FF
则&(与)运算是结果为:     00000081
所以:Integer.toHexStriing(-127 & 0xFF) 的结果为:81。

另外,其中很多计算,都使用0x这样的16进制进行运行:
如 0xF的二进制为 1111 ,即四个1。
   0xFF的二进制为 1111 1111 ,即8个1的二进制形式
   每多一个F就是多一个4位的1111。
   最多8个F。
分享到:
评论
1 楼 像胡杨树一样活着 2013-01-27  
欣赏有想法并努力实践的人。支持!

相关推荐

    c语言习题好题完整版

    (全国计算机等级考试) 第一章 程序设计基本...[2.13] 不合法的十六进制数是 A)oxff B)0Xabc C)0x11 D)0x19 二、填空题 [2.14] 若k为int整型变量且赋值11。请写出运算k++后表达式的值A)____和变量的值B)_____。

    oxFF-开源

    oxFlexFramework是Java 100%开源项目。 它将帮助开发人员将Flex与J2EE容器一起使用。 这是一个简单易用的框架,将提供一套工具来管理数据访问,日志记录系统和错误处理等。

    PC机与单片机串口通信

    PC机 单片机 串口通信 VB MSComm控件

    单片机应用技术复习题.pdf

    P1 口在作为输入口使用时,在读取数据之前,通常要先向 P1 口送数据(OXFF ) 。 10.开机复位后,CPU 使用的是第二组工作寄存器,地址范围是(08H-0FH ) 。 11.使用定时器 T0 时,有(4 )种工作模式。 12. MCS-51 ...

    电路资料单片机

    单片机开发资料,单片机程序开发,c语言,单片机相关资料

    加密的通信安全

    给出的几种加密源码包,应用...对称加密AES或者DES,56位的DES加密,128位或192位或256位AES加解密通常可设随便的密码长度,其它位用常字符代替如oxff;非对称加密多要先因式分解,对称加密多就移位处理。其实能应用则可

    FAT文件系统在NAND Flash存储器上的改进设计FAT文件系统在NAND Flash存储器上的改进设计

    数据写入必须在李白的区块或者擦除后的区块巾进行,其底层技术要求以块为单位进行擦除(将“Oxff”写入到要擦除的存储块中),再按页写入。Flash存储器的擦除次数是有限的,一般是100000次。当某块执行过度的擦除操作...

    AVR单片机端口设置

    与PORTA=OXFF;DDRA=OXFF;是有区别的,这两种顺序对应IO口的电平变化是不一样的。这个区别是在产品性能上面的,从表面上看不出明显区别,没有一定电路功底的可能不太好理解。DDRA、PORTA、在上电时默认都为0x00;如果...

    C语言设计实例100加proteus

    单片机C语言程序设计实训100例——基于8051+Proteus仿真

    SPI接口FM25CL64铁电存储器测试读写代码

    SPI接口FM25CL64铁电存储器测试读写代码,在PICC18上编译通过.如果有任何疑问,可以联系我来解答.QQ52478116

    kingston DT 101 G2 16G优盘PS2251-61芯片量产工具.zip

    一个新买的kingston DT 101 G2 16GU盘,用芯片精灵检测主控型号为:Phison(群联) PS2251-61(PS2261) - F/W 05.09.53闪存识别码: 98DE9892 - Toshiba(东芝) [TLC]USB设备ID: VID = 0930 PID = 6545...

    0x00000000内存不能为read修复工具

    不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序 自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于 该应用程序...

    STM32F103RCT6读写FM25CL64(已在工程中应用)

    STM32F103RCT6读写FM25CL64(已在工程中应用) 1:如果写入后读出来的全是0x00,那么很有可能是SPI模式配错了,可以参考压缩包内SPI配置 2:利用FM25CL64最后一个字节作为检测位,开机读取一次用来测试芯片是否正常...

    清能德创coolDrive R系列伺服驱动说明书

    清能德创coolDrive R系列伺服驱动说明书v1.0版本以及相应的调试软件Driverstarter2.0

    STM32F103单片机_SPI读写FM25CL64铁电存储器驱动程序代码.zip

    STM32F103单片机_SPI读写FM25CL64铁电存储器驱动程序代码 /******************************************************** //project:STM32F1 SPI读写FM25CL64驱动代码 //date:2013.09.26 //author:huangzheng ...

    FAT文件系统在NAND Flash存储器上的改进设计

    数据写入必须在李白的区块或者擦除后的区块巾进行,其底层技术要求以块为单位进行擦除(将“Oxff”写入到要擦除的存储块中),再按页写入。Flash存储器的擦除次数是有限的,一般是100000次。当某块执行过度的擦除操作...

    python读文件保存到字典,修改字典并写入新文件的实例

    #从文本中获取英文对应的故障码,并保存在tcode字典(故障码文本样例:oxff,0xff,0x00,0x01, "Fuel Volume Regulator Control Circuit High") with open('text_en.txt','r+')as fileone: for line in fileone....

    java byte相互转换详解左右位移

    java基本类型转byte,设计原码、补码、反码、左右位移等知识,赚点积分

Global site tag (gtag.js) - Google Analytics