Java的二进制数据处理

在Java中,可以使用二进制运算来处理整数类型数据。

二进制基础知识

二进制(binary)在数学和数字电路中指以2为基数,由0和1组成的数字系统。

位运算符

位运算符是对二进制数进行操作的特殊运算符。在Java中,有以下几种位运算符。

  • &:按位与运算符,对两个操作数进行按位与操作,结果中的每一位都是两个操作数相应位的逻辑与。
  • |:按位或运算符,对两个操作数进行按位或操作,结果中的每一位都是两个操作数相应位的逻辑或。
  • ^:按位异或运算符,对两个操作数进行按位异或操作,结果中的每一位都是两个操作数相应位的逻辑异或。
  • ~:按位取反运算符,对操作数进行按位取反操作,结果中的每一位都是操作数相应位的逻辑取反。
  • <<:左移运算符,将一个数的二进制位向左移动指定的位数。
  • >>:右移运算符,将一个数的二进制位向右移动指定的位数。

按位与(&)

位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。

按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。

int a = 5;   // 二进制表示为 101
int b = 3;   // 二进制表示为 011
int c = a & b;  // 结果为 1,二进制表示为 001

特殊用法:

(1)与0相与可清零。

(2)与1相与可保留原值,可从一个数中取某些位。例如需要取10101110中的低四位,10101110 & 00001111 = 00001110,即得到所需结果。

2. 按位或(|)

两位只要有一位为1,结果则为1,即1|1=1,1|0=1,0|1=1,0|0=0。

int a = 5;   // 二进制表示为 101
int b = 3;   // 二进制表示为 011
int c = a | b;  // 结果为 7,二进制表示为 111

特殊用法:

(1)与0相或可保留原值。

(2)与1相或可将对应位置1。例如,将X=10100000的低四位置1,使X | 00001111 = 10101111即可。

3. 异或运算(^)

两位为“异”,即一位为1一位为0,则结果为1,否则为0。即1^1=1,1^0=0,0^1=0,0^0=1。

int a = 5;   // 二进制表示为 101
int b = 3;   // 二进制表示为 011
int c = a ^ b;  // 结果为 6,二进制表示为 110

特殊用法:

(1)使指定位翻转:找一个数,对应X要翻转的各位为1,其余为0,使其与X进行异或运算即可。例如,X=10101110,使低四位翻转,X ^ 00001111 = 10100001。

(2)与0相异或保留原值。例如X ^ 00000000 = 10101110。

(3)交换两变量的值。(比借助容器法、加减法效率高)原理:一个数对同一个数连续两次进行异或运算,结果与这个数相等。

因此,交换方法为:A = A ^ B,B = A ^ B,A = A ^ B。

4. 取反(~)

int a = 5;   // 二进制表示为 101
int b = ~a;  // 结果为 -6,二进制表示为 11111111111111111111111111111010

将一个数按位取反,即~ 0 = 1,~ 1 = 0。

5. 左移(<<)

将一个数左移x位,即左边丢弃x位,右边用0补x位。例:11100111 << 2 = 10011100。

1<<2     相当与2的2次方00000001 变成   00000100

拓展:

  • 原码:一个整数按照绝对值大小转换为二进制即为原码;
  • 反码:将二进制数按位取反,得到的即为反码;
  • 补码:反码加1即为补码。
  • 由于计算机底层硬件的限制,负数均使用补码表示。若左移时舍弃的高位全为0,则每左移1位,相当于该数十进制时乘一次2。

例:11(1011) << 2 = 44(11表示为1011时实际上不完整,若计算机中规定整型的大小为32bit,则11的完整二进制形式为00000000 00000000 0000000 00001011)

6. 右移(>>)

-1>>2
//-1-1原码:10000001
-1反码:11111110
-1补码:11111111
-1>>2的补码:11111111
反码:11111110
原码:10000001

将一个数右移若干位,右边舍弃,正数左边补0,负数左边补1。每右移一位,相当于除以一次2。

例:4 >> 2 = 1,-14 >> 2 = -4。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NCC基础开发技能培训

YonBuilder for NCC 是一个带插件的eclipse工具&#xff0c;跟eclipse没什么区别 NC Cloud2021.11版本开发环境搭建改动 https://nccdev.yonyou.com/article/detail/495 不管是NC Cloud 新手还是老NC开发&#xff0c;在开发NC Cloud时开发环境搭建必看&#xff01;&#xff…

python基础教程七(布尔类型,条件语句,断言)

1. 布尔类型 在前面&#xff0c;你遇到了很多真值&#xff0c;现在终于需要他们了。真值也称布尔值。 用做布尔表达式&#xff08;如用作if语句中的条件&#xff09;时&#xff0c;下面的值都将被解释器视为假: False None 0 "" () [] {} 换而言之&#xff0…

207课程表

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 …

Vue2商品规格选择

Vue2Element-ui Vu2仿写拼多多商家后台规则选择&#xff0c;为什么用Vue2呢&#xff0c;因为公司用的Vue2... 样式不是很好看&#xff0c;自己调一下就行。 <template><div ref"inputContainer"><div>{{ combinationsResult }}</div><…

深入浅出Nacos的原理

前言 本文来讲一讲nacos作为底层注册中心的实现原理。那么就有这几个问题&#xff1f; 临时实例和永久实例是什么&#xff1f;有什么区别&#xff1f; 服务实例是如何注册到服务端的&#xff1f; 服务实例和服务端之间是如何保活的&#xff1f; 服务订阅是如何实现的&#…

Adobe illustrator各版本安装指南

下载链接 https://pan.baidu.com/s/11sTpMUbQEXhyjpkBlixcLg?pwd0531 #2024版 1.鼠标右击【Ai2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 Ai2024(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Setup】选择【以…

【Pytorch】学习记录分享11——GAN对抗生成网络

PyTorch GAN对抗生成网络 0. 工程实现1. GAN对抗生成网络结构2. GAN 构造损失函数&#xff08;LOSS&#xff09;3. GAN对抗生成网络核心逻辑3.1 参数加载&#xff1a;3.2 生成器&#xff1a;3.3 判别器&#xff1a; 0. 工程实现 原理解析&#xff1a; 论文解析&#xff1a;GAN…

canvas如何自定义绘制图片

在Canvas中&#xff0c;可以使用drawImage()方法来绘制图片。该方法接受三个参数&#xff1a; 1. 图片对象&#xff1a;可以是<img>、<canvas>或<video>元素。 2. 图片左上角在Canvas中的X坐标。 3. 图片左上角在Canvas中的Y坐标。 如果要自定义绘制图片&a…

Postman接口测试实战

1.什么是接口测试 来自百度百科的解释&#xff1a; 接口测试是测试系统组件间接口的一种测试&#xff0c;主要用于测试系统与外部其他系统之间的接口&#xff0c;以及系统内部各个子模块之间的接口。测试的重点是要检查接口参数传递的正确性&#xff0c;接口功能实现的正确性&…

使用.Net nanoFramework为ESP32进行蓝牙配网

通过前面的介绍&#xff0c;我们已经学会了如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。然而&#xff0c;在实际的物联网环境中&#xff0c;我们往往需要使用更便捷的式来满足配网需求。这篇文章将带你了解一些常见的配网方案&#xff0c;并以 ESP32 为例&…

Java运算符简单介绍

文章目录 1. 算术运算符2. 赋值运算符3. 比较&#xff08;关系&#xff09;运算符4. 逻辑运算符5. 位运算符6. 条件运算符&#xff08;三元运算符&#xff09;7. 运算符优先级 1. 算术运算符 &#xff1a;加法 int a 5; int b 3; int sum a b; // 结果为8-&#xff1a;减…

docker——docker compose简介和案例(部署prometheus+granfana+node-exporter)

docker compose Docker Compose 是 Docker 官⽅编排&#xff08;Orchestration&#xff09;项⽬之⼀&#xff0c;负责快速的部署分布式应⽤。 它允许⽤户通过⼀个单独的 docker-compose.yml 模板⽂件 &#xff08;YAML 格式&#xff09;来定义⼀组相关联的应⽤容器为⼀个项⽬…

基于java,springboot的论旅游管理系统设计与实现

环境以及简介 基于java,springboot的论旅游管理系统设计与实现&#xff0c;Java项目&#xff0c;SpringBoot项目&#xff0c;含开发文档&#xff0c;源码&#xff0c;数据库以及ppt 源码下载 环境配置&#xff1a; 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服…

vue生成动态表单

Vue动态表单可以根据不同的数据动态地生成表单组件&#xff0c;方便快速地实现表单的创建和处理。下面给出一个示例&#xff0c;演示如何使用Vue动态表单生成一个简单的注册表单。 <template><form submit.prevent"submitForm"><div v-for"fiel…

PDF文档转换工具箱流量主小程序开发

PDF转换小助手&#xff0c;不仅是文件格式转换的利器&#xff0c;更是一位得力的助手。它精通PDF与各类文档间的自由转换&#xff0c;如Word、Excel、PowerPoint等。 转换选项丰富多样&#xff0c;满足您对文件保护、页面设置、图像品质等细致要求。处理大量文件&#xff1f;…

翻译!翻译!AI是什么?

2023年开年以来&#xff0c;AI突然开窍&#xff0c;终于不再是以前那个上下文不能连贯的呆子了&#xff0c;变得非常智能&#xff0c;非常好用。随后AI开始井喷式爆发&#xff0c;各大厂商开始发力&#xff0c;开始发布自家的AI产品。AI也逐渐成为我们日常生活的常态。我们也能…

Unity SVN更新提交小工具

Unity SVN更新提交小工具 前言使用说明必要前提源码参数说明 感谢 前言 Unity开发时每次都要到文件夹中操作SVN&#xff0c;做了一个小工具能够在Editor中直接操作。 使用说明 必要前提 前提是要安装好SVN&#xff0c;在文件夹右键能够看到安装的SVN 源码 using System…

用友U8+CRM 逻辑漏洞登录后台漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 reservationcomplete.php文件存在逻辑漏洞&#xff0c;未授权的攻击者通过…

渗透第四天 (抽空再看一天 )

网站不同的加密 ok  常用的对称加密算法有&#xff1a;DES、3DES、RC2、RC4、AES 常用的非对称加密算法有&#xff1a;RSA、DSA、ECC 使用单向散列函数的加密算法&#xff08;摘要算法&#xff09;&#xff1a;MD5、SHA 密码存储加密 md5 32位或者16位 0-9 a-f…

word表格跑到下一页,老是空很多在上一页,且与标题分离?

1、方法一 表格属性里边&#xff0c;行设置中&#xff0c;有一个“跨页断行”的选项&#xff0c;勾上应该可以解决你这个问题&#xff0c;你可以先试试&#xff1b; 2、方法二 鼠标点击表格任意位置&#xff0c;将光标定位到表格中&#xff0c;然后单击鼠标右键&#xff0c;…