当前位置: 首页 > news >正文

Java基础——了解进制和位运算

文章目录

  • 关于进制
  • 位运算
    • 左位移
    • 右位移
    • 无符号右移
    • 取反
    • 按位与
    • 按位或
    • 按位异或

关于进制

所有数字在计算机底层都是以二进制的形式存在。

进制的四种表达形式:

  • 二进制:[0,1],满2进1,以0b或0B开头。
  • 八进制:[0-7],满8进1,以0开头。
  • 十进制:[0-9],满10进1。
  • 十六进制:[0,9,A-F],满16进1,以0x或0X开头(此处的A-F不区分大小写)。

进制之间的相互换算参考:https://xinzhi.wenda.so.com/a/1537180588200142

在Java中的整数,默认是int类型占4字节,占32bit(1字节等于8bit),其第32位是符号位;long类型占8个字节,占64bit,其第64位是符号位。

比如:int整数8的二进制:00000000 00000000 00000000 00001000,最多不超过32位。

注意:符号位,0表示正,1表示负。

二进制整数的三种形式:

  • 原码:直接将一个整数转换二进制数,最高位是符号位。
  • 反码:正数的反码和原码相同,负数的反码是对原码符号位以外的每一位按位取反(由于是负数的反码所以符号位总是1)。
  • 补码:正数的补码和原码相同,负数的补码是它的反码加1。

注意:正数的原码、反码和补码都相同。补码转原码是补码取反+1

为什么要使用原码、反码和补码的表示形式?

答:计算机辨别“符号位”会让计算机的基础电路设计变得复杂,于是人们想到将符号位也参与运算,我们知道根据运算法则,减去一个整数等于加上一个负数,所以机器可以只有加法没有减法,这样计算机运算的设计就简单了。(在计算机中,都是补码参与计算)

为什么正数的原码、反码和补码相同?

答:反码和补码的出现是用来解决做减法问题,通过加负数的方式达到做减法的效果,所以只有负数才有反码和补码,正数没有,所有正数的反码和补码都是本身(原码)。

例:演示在计算机中如何计算1+(-1)= 0的过程

整数二进制转换:
1:00000000 00000000 00000000 00000001
-1:10000000 00000000 00000000 00000001
补码转换:
1:00000000 00000000 00000000 00000001(补码)
-1:11111111 11111111 11111111 11111110(反码)-> 11111111 11111111 11111111 11111111(补码)
说明:二进制相加,逢二进一。00000000 00000000 00000000 00000001+	11111111 11111111 11111111 11111111----------------------------------------100000000 00000000 00000000 00000000 -> 00000000 00000000 00000000 00000000 = 0注:最高位超出位数直接被舍弃,最后计算结果为0.

位运算

位运算是对补码的操作。运算完后,需要将补码转回原码再转十进制,才是最后运算结果,由于正数的补码和原码相同,就不需要转,负数需要转。

注意:

  • 正数位运算,不管左位移还是右位移,都是补0。
  • 负数位运算,左位移和无符号右移补0,且左位移最高位总是1,右位移补1。

左位移

运算符:<<
说明:整数的二进制数向左移动指定位数。
示例:1 << 2 = 4

补码转换:
1:00000000 00000000 00000000 000000011向左位移2位(1<<2)00000000 00000000 00000000 00000001
<<  00000000 00000000 00000000 00000001----------------------------------------00000000 00000000 00000000 00000100 = 4
注:左位移后,左边超出部分舍弃,右边用0补齐。

右位移

运算符:>>
说明:整数的二进制数向右位移指定位数。
示例:8>>2 = 2

补码转换:
8:00000000 00000000 00000000 00001000
-8:10000000 00000000 00000000 00001000 (取反)-> 11111111 11111111 11111111 11110111 (+1)-> 11111111 11111111 11111111 111110008向右位移2位00000000 00000000 00000000 00001000
>>    00000000 00000000 00000000 00001000------------------------------------------0000000000 00000000 00000000 000010 = 2
注:右位移后,左边用0补齐,右边超出部分舍弃。-8向右位移2位11111111 11111111 11111111 11111000
>>    11111111 11111111 11111111 11111000------------------------------------------11111111 11111111 11111111 11111110 (取反)-> 10000000 00000000 00000000 00000001 (+1)-> 10000000 00000000 00000000 00000010 = -2
注:运算后得到的是补码需转成原码。

无符号右移

运算符:>>>
说明:整数的二进制数向右位移指定位数,正数用0补齐,负数用1补齐。
示例:
8>>>2 = 2
-8>>>2 = 1073741822

补码转换:
8:00000000 00000000 00000000 00001000
-8:10000000 00000000 00000000 00001000 (取反)-> 11111111 11111111 11111111 11110111 (+1)-> 11111111 11111111 11111111 111110008无符号向右位移2位00000000 00000000 00000000 00001000
>>>   00000000 00000000 00000000 00001000------------------------------------------0000000000 00000000 00000000 000010 = 2-8无符号向右位移2位11111111 11111111 11111111 11111000
>>>	  11111111 11111111 11111111 11111000------------------------------------------00111111 11111111 11111111 11111110 = 1073741822
注:无符号右位移,左边用0补齐,右边超出部分舍弃。

在线二进制转换十进制:https://www.jisuan.mobi/KZn.html

取反

运算符:~
运算规则:~1=0; ~0=1,1变0,0变1。
示例:~3 = -4

补码转换:
3:00000000 00000000 00000000 000000113取反
~ 00000000 00000000 00000000 00000011
-------------------------------------11111111 11111111 11111111 11111100 (取反)-> 10000000 00000000 00000000 00000011 (+1)-> 10000000 00000000 00000000 00000100 = -4

按位与

运算符:&
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1,只有同时都是1的时候才是1,否则是0。
示例:3 & 5 = 1

补码转换:
3:00000000 00000000 00000000 00000011
5:00000000 00000000 00000000 000001013按位与500000000 00000000 00000000 00000011
& 00000000 00000000 00000000 00000101
-------------------------------------00000000 00000000 00000000 00000001 = 1

按位或

运算符:|
运算规则:0 | 0=0; 0 | 1=1; 1 | 0=1; 1 | 1=1,任意一方是1就是1,否则是0。
示例:3 | 5 = 7

补码转换:
3:00000000 00000000 00000000 00000011
5:00000000 00000000 00000000 000001013按位或500000000 00000000 00000000 00000011
| 00000000 00000000 00000000 00000101
-------------------------------------00000000 00000000 00000000 00000111 = 7

按位异或

运算符:^
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0,相同的值为0,不同的值为1。
示例:3^5 = 6

补码转换:
3:00000000 00000000 00000000 00000011
5:00000000 00000000 00000000 000001013按位异或500000000 00000000 00000000 00000011
^ 00000000 00000000 00000000 00000101
---------------------------------------00000000 00000000 00000000 00000110 = 6

相关文章:

Java基础——了解进制和位运算

文章目录 关于进制位运算左位移右位移无符号右移取反按位与按位或按位异或 关于进制 所有数字在计算机底层都是以二进制的形式存在。 进制的四种表达形式&#xff1a; 二进制&#xff1a;[0,1]&#xff0c;满2进1&#xff0c;以0b或0B开头。八进制&#xff1a;[0-7]&#xf…...

mybatisplus 自定义mapper加多表联查结合分页插件查询时出现缺失数据的问题

问题描述 最近做项目时使用了mybatisplus&#xff0c;分页插件也使用的是mybatisplus自带的分页插件&#xff0c;业务需求是查询客户列表&#xff0c;每个客户列表中有一个子列表&#xff0c;在通过分页插件查询后&#xff0c;会出现数量总数为子列表总数、客户列表与子列表不…...

陪诊系统|陪诊软件革新陪诊体验解决病患难题

随着医疗服务的不断升级和改善&#xff0c;陪诊系统作为现代医院的一项重要创新&#xff0c;为病患和陪护人员提供了更加便捷、高效的服务体验。本文将全面介绍陪诊系统的功能、特点和优势&#xff0c;让您更好地了解和体验这一创新科技。 一、系统功能 陪诊系统旨在为病患和陪…...

[Tkinter 教程08] Canvas 图形绘制

python - [译][Tkinter 教程08] Canvas 图形绘制 - 个人文章 - SegmentFault 思否 一、简介 Canvas 为 Tkinter 提供了绘图功能. 其提供的图形组件包括 线形, 圆形, 图片, 甚至其他控件. Canvas 控件为绘制图形图表, 编辑图形, 自定义控件提供了可能. 在第一个例子里, …...

ES6 Symbol 数据结构

1. Symbol概念以及引入原因 ES6 引入了的一种新的原始数据类型Symbol&#xff0c;表示独一无二的值。它是 JavaScript 语言的第七种数据类型&#xff0c;前六种是&#xff1a;undefined、null、布尔值&#xff08;Boolean&#xff09;、字符串&#xff08;String&#xff09;、…...

Redis常用数据类型、Redis常用命令

Redis常用数据类型、Redis常用命令&#xff1a; Redis常用数据类型&#xff1a;1. 字符串String 类型2. 哈希hash 类型3. 列表list 类型4. 集合set 类型5. 有序集合sorted set / zset 类型 Redis常用命令&#xff1a;1. 字符串操作命令2. 哈希操作命令3. 列表操作命令4. 集合操…...

ERP系统是如何运作的?erp管理系统操作流程

ERP系统是如何运作的&#xff1f;ERP系统的运作流程是怎样的&#xff1f; 以简道云ERP管理系统为例&#xff1a; 各行各业适配的ERP系统​>>>>https://www.jiandaoyun.com 可以看到上面那个流程图&#xff0c;一般来说&#xff0c;我们把ERP系统可以分为4个大的模…...

springBoot复杂对象表示和lombok的使用

springBoot复杂对象表示 前言简单案例lombok的使用通过properties文件进行绑定在yaml文件中使用 前言 对象&#xff1a;键值对的集合&#xff0c;如&#xff1a;映射&#xff08;map)/哈希&#xff08;hash)/字典&#xff08;dictionary&#xff09; 数组&#xff1a;一组按次…...

如何选择最适合你的LLM优化方法:全面微调、PEFT、提示工程和RAG对比分析

一、前言 自从ChatGPT问世以来&#xff0c;全球各地的企业都迫切希望利用大型语言模型&#xff08;LLMs&#xff09;来提升他们的产品和运营。虽然LLMs具有巨大的潜力&#xff0c;但存在一个问题&#xff1a;即使是最强大的预训练LLM也可能无法直接满足你的特定需求。其原因如…...

Jenkins实现CI/CD发布(Ansible/jenkins共享库/gitlab)

Jenkins实现多环境发布 1. 需求介绍 本人负责公司前端业务模块&#xff0c;由于前端模块较多&#xff0c;所以在编写jenkinsfile时会出现很多项目使用的大部分代码相同的情况&#xff0c;为解决这种问题&#xff0c;采用了jenkins的共享库方式优化&#xff0c;并且jenkins要支持…...

使用navicat查看类型颜色

问题描述&#xff1a; 最近遇到一个mongodb的数据问题。 在date日期数据中&#xff0c;混入了string类型的数据&#xff0c;导致查询视图报错&#xff1a; $add only supports numeric or date types解决办法&#xff1a; 使用类型颜色工具。 找到在last_modified_date字段中…...

iOS 中,Atomic 修饰 NSString、 NSArray,也会线程不安全

众所周知&#xff0c;基础类型如 int、float 的变量被 atomic 修饰后就具有原子性&#xff0c;则线程安全。 然而有些情况&#xff0c;atomic 修饰后不一定是线程安全的。 atomic 修饰 NSString&#xff0c;NSArray 的时候&#xff0c;只是保障首地址&#xff08;数组名&…...

2023医药微信公众号排名榜top100汇总合集

相信每个医药人都或多或少关注了几个医药微信公众号&#xff0c;便于日常了解到最新的医药新闻包括治疗技术、药物研发、研究成果、医学进展、临床试验进展、市场动向等前沿动态。 笔者也不列外&#xff0c;大大小小的公众号收集了有上百个&#xff0c;本着方便查看的目的&…...

基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)三

1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数&#xff0c;进而实…...

Cython编译文件出错

报错信息&#xff1a; (rpc) stuamax:~/segment/dss_crf$ python setup.py install Compiling pydensecrf/eigen.pyx because it changed. Compiling pydensecrf/densecrf.pyx because it changed. [1/2] Cythonizing pydensecrf/densecrf.pyx /home/stu/anaconda3/envs/rpc/l…...

WPF 用户控件依赖注入赋值

前言 我一直想组件化得去开发WPF&#xff0c;因为我觉得将复杂问题简单化是最好的 如何组件化开发 主窗口引用 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.…...

leetcode-48.旋转图像

1. 题目 leetcode题目链接 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 2. 编程 矩阵转置&#xff1a; 遍历矩阵&#x…...

antd的RangePicker设置默认值,默认近七天(andt+react)

import moment from "moment";state {initData:[moment().startOf(day).subtract(6, d), moment().endOf(day)], }<FormItem label"产生时间" {...tailItemLayout}>{getFieldDecorator("produceTime", {initialValue: initData})(<Ran…...

大数据可视化模块竞赛Vue项目文件结构与注意事项

1.vue项目src目录下只有两个文件夹与两个js文件,如图所示: 2.asseets目录存放包或其他外部资料 注意 :echarts采用的是引用外部文件导入 let echarts = require(@/assets/echarts.min.js) 3.components目录存放绘制页面的vue文件(我这里示例创建了一个newPage.vue)…...

户外运动盛行,运动品牌如何利用软文推广脱颖而出?

全民健康意识的提升和城市居民对亲近自然的渴望带来户外运动的盛行&#xff0c;这也使运动品牌的市场保持强劲发展势头&#xff0c;那么在激烈的市场竞争中&#xff0c;运动品牌应该如何脱颖而出呢&#xff1f;下面就让媒介盒子告诉你&#xff01; 一、 分享户外运动干货 用户…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...