转载地址:https://blog.csdn.net/iamgamer/article/details/79354617

其中有两个位运算,一个是>>,一个是&。

0xff的作用一:

十六进制0xff的长度是一个字节,即八位,二进制为:1111 1111,那么一个 8bit 数与1111 1111与运算还是这个数本身,但是一个16bit 数与 0xff就被截断了,比如 1100110011001100 & 0xff结果为 11001100。那如果想不被截断怎么办?把0xff扩展为二个字节即:0xffff,那么以此类推,0xffffff,0xffffffff都出来了。

0xff的作用二:

java专属,由于java没有unsigned类型,所以为了适应与其他语言二进制通讯时各种数据的一致性,需要做一些处理。最直观的例子:int a = -127 & 0xFF ; // 等同于 unsigned int c = 129; (这里的-127与129是字节,只为了直观而写的具体数字)这里要严格说明一点:再32位机器上,0xff实际上是 0x00000000 00000000 00000000 11111111,而-127是 11111111 11111111 11111111 10000001 (补码形式), 那么-127 & 0xff的结果自然是00000000 00000000 00000000 10000001 即 129.简而言之,该作用主要是为了将 有符号数转换为无符号数。

>>8的作用:

这个是根据需求而定的,可以是>>8也可以是>>16,>>24,等等而跟

& 0xff运算的意义其实就是截断,将123456的高位右移8位,通过0xff截取出来。实际意义就是取字节,比如一个4字节的数,需要将每个字节内容取出来转换出目标数据,那么通过>> 并且 &0xff 运算 就可以去除想要的部分。再详细点:4字节 ,32 位,按照大端方式排列,

最高位                                         最低位

11111111 10101010 11000011 10101010

最高位8字节要移到最低位那么,这个8个字节>>(3*8),然后与0xff运算,取出,然后后续得>>(2*8) & 0xff ;>>(1*8) & 0xff,均可取出。再来一个简单的例子巩固基础:

将int a转换成字节,一般情况下,int 4字节,那么需要4个byte来保存,又因为java是大端排序,那么byte[0]为最高位,所以需要>>24,这么一个个的把a的4个字节取出存入byte数组中,这里0xff不仅截断,而且还将有符号转换成了无符号。

那么将字节转换回去就不一样了,不是截断而是融合 ,因此需要将& 改为 |,并且还得把每个字节移到所在实际位置,比如byte[0]是最高位,因此还得将其移到4个字节的头部即需要<<24,那么后续得以此类推。一个完成的int32型就出现了。

但是由于java的原因,再做位移操作之前还是不能少了有符号转无符号操作。

至此,我想读者朋友,你应该完全理解了。

诸如(1234568) 0xFF这类相关推荐

  1. 解析HTML文件 - 运用SgmlReader类来解析HTML文件

    运用.NET Framework类来解析HTML文件.读取数据并不是最容易的.虽然你可以用.NET Framework中的许多类(如StreamReader)来逐行解析文件,但XmlReader提供的 ...

  2. 基于价值链的流程框架分类_基于价值的类

    基于价值链的流程框架分类 在Java 8中,某些类在Javadoc中有一个小注释,说明它们是基于值的类 . 其中包括简短说明的链接,以及有关不使用它们的限制. 这很容易被忽略,如果这样做,则可能会在将 ...

  3. misc类设备驱动2——misc类设备的简介

    以下内容源于朱有鹏嵌入式课程的学习与整理,如有其侵权请告知删除. 一.misc类设备的含义 1.名字含义 misc是英文Miscellaneous的缩写,中文意思是"杂项.混杂", ...

  4. JVM中篇:字节码与类的加载篇

    0.概述 0.1字节码文件的跨平台性 0.1.1.Java语言:跨平台的语言(write once,run anywhere) 当]ava源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再 ...

  5. 量子计算机与人脑接口,量子信息科学:量子计算机、隐形传物与人脑量子运算...

    原标题:量子信息科学:量子计算机.隐形传物与人脑量子运算 提示: 自然界有三个要素:物质.能量和信息:相应的有三类学科:物质科学.能源科学和信息科学.量子力学的诞生从根本观念上改变了人类对自然的认识, ...

  6. docker手册_Docker手册

    docker手册 The concept of containerization itself is pretty old, but the emergence of the Docker Engin ...

  7. react中纯函数_如何在纯React中创建电子邮件芯片

    react中纯函数 by Andreas Remdt 由Andreas Remdt 如何在纯React中创建电子邮件芯片 (How to create email chips in pure Reac ...

  8. flutter开发小程序_为什么我认为Flutter是移动应用程序开发的未来

    flutter开发小程序 I dabbled a bit in Android and iOS development quite a few years back using Java and Ob ...

  9. es6 generator_让我们探索一下ES6 Generators

    es6 generator by Tiago Lopes Ferreira 由Tiago Lopes Ferreira 让我们探索一下ES6 Generators (Let's explore ES6 ...

最新文章

  1. 【内存泄露】Memory Leaks 内存优化
  2. mysql中int时间和datetime时间的互相转换
  3. 从头开发一个BurpSuite数据收集插件
  4. 整理下java六种单例模式
  5. 深入研究Java类加载机制
  6. Java 如何有效地避免OOM:善于利用软引用和弱引用
  7. 第三周课程总结及实验报告(一)
  8. 这两年多我写PHP业务代码的方式是如何进化的
  9. 服务器屏蔽非法app请求
  10. python表白代码-表白python代码
  11. STM32调试MIPI RFFE协议
  12. Big-Endian Little-Endian
  13. mysql获取最大天数_mysql如何查询两个日期之间最大的连续登录天数
  14. python输出课程表
  15. Linux中编写Shell脚本
  16. “三天打鱼两天晒网问题
  17. 简单假币问题以及复杂假币问题
  18. word文档添加目录
  19. 【03yy and one】
  20. CAS - CentOS下部署CAS服务器及简单使用

热门文章

  1. Xshell 连接服务器失败的解决方法
  2. 关于Nginx mmap(MAP_ANON|MAP_SHARED, 314572800)报错
  3. LIN总线开发:智能雨量传感器
  4. 数据中台的数据仓库和商业智能BI的数据仓库有什么区别?
  5. 深入探讨IGP协议:OSPF与ISIS的区别(区域类型比较,邻接关系比较,DR和DIS比较,如何计算路由以及性能的比较)
  6. java实现rabbitmq_RabbitMQ搭建(2)-Java简单实现
  7. PowerPoint2003常用快捷键
  8. 渲染图用计算机配置,3d渲图电脑配置清单
  9. 软件测试工资一般是多少
  10. 股指指数平稳性检验和随机性检验