应用按位与操作,分离字节

应用按位与操作拆分字节

对于一个多字节的无符号整数,如由四个字节组成的整数A,用二进制表示为A1A2A3A4这四个字节,现在希望将这四个字节拆分出来,得到每一个字节所表示的十进制数字。针对这个问题首先可以应用按位与操作将非当前字节都转化为0,以保留当前字节,例如,针对上述整数A,假设需要拆分出字节A2则可将字节A1、A3和A4内的数字都变为0得到新数字A’=0A200(注:其中0代表一个字节为0)。然后将所保留的当前字节挪到第一个字节的位置就可以得到拆分出来的字节所表示的十进制数字,沿用上述例子,字节A2所表示的十进制数A2’=000A2(注:其中0代表一个字节为0)。

现在用一个更具体的例子来说明这种字节拆分方法。将由三个字节,每一个字节八位的十进制整数10052611的每一个字节拆分出来。数字10052611的二进制结构下图所示,下面对B1字节、B2字节和B3字节分别进行拆分。

拆分B3字节,为此需要将B1字节和B2字节都置为0。按位与计算只有当两个数对应位置上的值都为1时,其计算结果才为1,否则为0。通过构造一个二进制数C,使其为三个字节,并且将前两个字节都设定为0,最后一个字节的所有位都设定为1。然后将C和B进行按位与操作来实现对B3字节的保留,如下图所示。

将按位与的结果直接转为十进制数就可以得到B3字节所表示的十进制数位:3。

拆分B2字节,和拆分B3字节类似,构造一个二进制数C,使其为三个字节,将除中间一个字节外的两外两个字节都设定为0。将原来的数字B与C做按位与运算,过程和结果如下图所示。

我们得到的结果为000000000110010000000000这个二进制数,虽然将除目标字节(即B2)之外的其他字节都变为了0,可是将这个结果转成十进制数时,得到的是25600,可是我们希望得到的数字是由01100100字节所表示的十进制数100。这是因为字节B2还处在自己原来所处的位置上,需要我们将按为与所得到的结果中的B2字节整体向低位移动8位。由于将十进制数除以2就相当于二进制中的所有非0位向低位移动一位,因此将按位与所得到的结果除以28即可以得到我们想要的结果。参照B2字节的分离过程,B1字节的分离过程便不再赘述。

本博客为博主原创博客,转载请注明出处,谢谢!

时间: 2024-10-04 03:45:24

应用按位与操作,分离字节的相关文章

043、Java中逻辑运算之实现位与操作

01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String[] args) { int numA = 9; // 定义整型变量 int numB = 11; // 定义整型变量 System.out.println(numA & numB); // 位与操作 } } 02.效果如下: 与操作是 真真得真 ,真

javaIO操作之字节输入流--OutputStream

OutputStream /** * <li>输出单个字节:public abstract void write(int b) throws IOException ; * <li>输出字节数组:public abstract void write(byte[] byte)throws IOException ; * <li>输出部分字节数组:public abstract void write(byet[] b,int off,int len) throws IOEx

javaIO操作之字节输入流--InputStream

/** *<li> InputStream类中定义的方法: * <li>读取的数据保存在字节数组中,返回读取的字节数组的长度:public int read(byte[] b) throws IOException ; * <li>读取部分数据保存在字节数组中,返回读取数据的长度:public int read(byte[] b,int off,int len)throws IOException ; * 如果文件内容读取到结尾字返回-1: */ package com

Selenium-元素定位与操作

UI的自动化本质就是识别元素,操作元素,而元素的识别就是通过HTML的标签和属性,所以对于基本的HTML的只是是必备的 随着页面复杂度的提升,加之很多公司的开发也没有统一规范,这就给识别元素造成了非常大的麻烦,非常的被动 一般要选取唯一标识的元素属性来进行定位.常用的几种元素定位方法: id driver.find_element_by_id("id的属性值") Name driver.find_element_by_name("name的属性值") class n

C#读操作(字节/字符)Filestream、File、StreamReader

方法一:使用Filestream,将文本一次性全部转换为字节,之后转换为string显示在text中 OpenFileDialog fd = new OpenFileDialog(); fd.Filter = "文本文件|*.txt";       //打开文件的类型 if (fd.ShowDialog() == DialogResult.OK) { fn = fd.FileName; FileStream fs = new FileStream(fn, FileMode.Open,

行为模式--字节码

理论要点 什么是字节码模式:将行为编码为虚拟机器上的指令,来赋予其数据的灵活性.从而让数据易于修改,易于加载,并与其他可执行部分相隔离. 要点 1,字节码模式:指令集定义了可执行的底层操作.一系列的指令被编码为字节序列. 虚拟机使用中间值堆栈依次执行这些指令. 通过组合指令,可以定义复杂的高层行为. 2,可以理解为项目中的转表工具,将excel中的数据转为二进制数据,并读取到工程中.还有如在项目中使用protobuf,json,xml等都是这么个思路. 3,字节码类似GOF的解释器模式,这两种方

深入理解java虚拟机(六)字节码指令简介

Java虚拟机指令是由(占用一个字节长度.代表某种特定操作含义的数字)操作码Opcode,以及跟随在其后的零至多个代表此操作所需参数的称为操作数 Operands 构成的.由于Java虚拟机是面向操作数栈而不是寄存器的架构,所以大多数指令都只有操作码,而没有操作数. 字节码指令集是一种具有鲜明特点.优劣势都很突出的指令集架构: 由于限定了Java虚拟机操作码的长度为1个字节,指令集的操作码不能超过256条.Class文件格式放弃了编译后代码中操作数长度对齐,这就意味者虚拟机处理那些超过一个字节数

SQL Server读写分离实现方案简介

读写分离是中型规模应用的数据库系统常见设计方案,通过将数据从主服务器同步到其他从服务器,提供非实时的查询功能,扩展性能并提高并发性. 数据库的读写分离的好处如下: 通过将“读”操作和“写”操作分离到不同的数据库服务器上,降低对主服务器的CPU.内存.存储.网络资源的争用: 主服务器的增删改进行时,不影响查询服务器的查询,降低阻塞的发生,提高了并发性: 建立容灾副本甚至实现异地容灾,在发生灾难时,可以减少数据的损失. 为了实现数据库读写分离,应用程序需要作如下调整: 在应用程序的配置文件中设置两个

数据库主从分离

数据库的读写分离的好处? 1. 将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈: 2. 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发: 3. 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性: 读写分离的基本原理就是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE)操作,而从数据库处理SELECT查询操作.数据库复制被用来把事务性操作导致的变更同步到其他从数据库.以SQL为例