参考: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   =   1234567890;
byte b1[] = new byte[4];
// b1[0] = (byte) (a & 0xff);
// b1[1] = (byte)((a >> 8) & 0xff);
// b1[2] = (byte)((a >> 16) & 0xff);
// b1[3] = (byte)((a >> 24) & 0xff);
b1[0] = (byte)((a >> 24) & 0xff);
b1[1] = (byte)((a >> 16) & 0xff);
b1[2] = (byte)((a >> 8) & 0xff);
b1[3] = (byte) (a & 0xff); int b2 = (b1[0]& 0xff) <<24 | (b1[1] & 0xff)<<16 | (b1[2] &0xff)<<8| (b1[3]& 0xff);
int b3 = (b1[0]) <<24 | (b1[1])<<16 | (b1[2])<<8| (b1[3]);
System.out.println(b2);//正确结果
System.out.println(b3);//错误结果,没有做有符号转无符号操作,导致结果不对。

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

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

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

>>8) & 0xFF中的 >> 和 &0xFF 的作用的更多相关文章

  1. linux中test与[ ]指令的作用

    linux中test与[ ]指令的作用: 在Linux中,test和[ ]功能是一样的,类似于c语言中的( ).不过Linux的test和[ ]是指令.在和if或者while联用时要用空格分开.

  2. Flex中 Array 的IndexOf 的作用

    Flex中 Array 的IndexOf 的作用 1.说明    indexOf用于在索引中从小到大查找,假设查得到就返回索引值,查不到就返回-1: 2.实例 (1)设计源代码 <?xml ve ...

  3. java中instanceof和getClass()的作用

    初学者难免有点混淆java中instanceof和getClass()的作用,  下面就来一一讲解. 父类A: class A { } 子类B: class B extends A { }  构造对象 ...

  4. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  5. 母版页中ContentPlaceHolder 控件的作用

    文章转自  http://wenku.baidu.com/link?url=7sLN0ihgZQ1XfX47b_y8qbpIVjS5T75Q1xvaoyIQ6OiKIgvzyVyRccnU9e9fqo ...

  6. inner join、left join、right join中where和and的作用

    inner join.left join.right join中where和and的作用 .内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括  (1)左外连接 (左边的 ...

  7. 转:css中overflow:hidden 不起作用了吗?

    css中overflow:hidden 不起作用了吗? 有同学遇到这样的问题,现象是给元素设置了overflow:hidden,但超出容器的部分并没有被隐藏,难道是设置的hidden失效了吗?其实看似 ...

  8. Python包中 __init__.py文件的作用

    原创连接 https://www.cnblogs.com/AlwinXu/p/5598543.html Python包中 __init__.py文件的作用 在创建python包的过程中,IDE都会在包 ...

  9. Linux中的Wheel组的作用

    原文:http://www.360doc.com/content/11/0505/10/4644186_114496525.shtml Linux中的Wheel组的作用(用自己的话翻译的) (原文) ...

随机推荐

  1. 09.redis 哨兵主备切换时数据丢失的解决方案

    一.两种数据丢失的情况 1. 异步复制导致的数据丢失   因为master->slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了 2 ...

  2. 教你如何在linux操作系统下玩【俄罗斯方块】高清+语音教程

    主讲人小冰QQ:986945193 新浪微博:http://weibo.com/mcxiaobing 百度贴吧:忆驹家族小冰 腾讯微博:http://t.qq.com/q986945193 高清视频 ...

  3. 广州做假证c

    广州做假证[电/薇:187ヘ1184ヘ0909同号]办各类证件-办毕业证-办离婚证,办学位证书,办硕士毕业证,办理文凭学历,办资格证,办房产证不. 这是一个简单的取最大值程序,可以用于处理 i32 数 ...

  4. 华为手机logcat中不显示log.e以下级别日志的解决方法

    (1) 进入拨号界面输入:*#*#2846579#*#* (2) 进入“后台设置” ——>“LOG设置” (3) 点击选择“AP日志” (4) 部分手机可能需要重启.

  5. unity 模板测试 详解

    https://blog.csdn.net/u011047171/article/details/46928463#t4

  6. Unity Plugins的使用方法

    一.为插件设置平台的方法 unity5之前,是通过把插件搞到对应目录进行区分平台的(比如在build target是ios平台时只把IOS目录的插件build进去),unity5之后提供了设置平台/c ...

  7. UVA 11292-Dragon of Loowater (贪心)

    Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major problem. The shor ...

  8. FRP代理链

    一.实验拓扑: 二.实验测试 1.vps上开启frp服务端服务 2.在DMZ区域机器上开启frp客户端,同时再开启下一层代理链的服务端 3.在内网A区域中的机器上开启第二次frp代理的客户端服务 4. ...

  9. 14_Web服务器-并发服务器

    1.服务器概述 1.硬件服务器(IBM,HP): 主机 集群 2.软件服务器(HTTPserver Django flask): 网络服务器,在后端提供网络功能逻辑处理数据处理的程序或者架构等 3.服 ...

  10. axure rp extension for chrome怎么用

    1)打开文件(原型图)的resources文件夹>chrome文件夹>将文件axure-chrome-extension.crx拉至谷歌浏览器的扩展程序页面,点击确定添加 2)提示出错时, ...