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基础——了解进制和位运算
文章目录 关于进制位运算左位移右位移无符号右移取反按位与按位或按位异或 关于进制 所有数字在计算机底层都是以二进制的形式存在。 进制的四种表达形式: 二进制:[0,1],满2进1,以0b或0B开头。八进制:[0-7]…...
mybatisplus 自定义mapper加多表联查结合分页插件查询时出现缺失数据的问题
问题描述 最近做项目时使用了mybatisplus,分页插件也使用的是mybatisplus自带的分页插件,业务需求是查询客户列表,每个客户列表中有一个子列表,在通过分页插件查询后,会出现数量总数为子列表总数、客户列表与子列表不…...
陪诊系统|陪诊软件革新陪诊体验解决病患难题
随着医疗服务的不断升级和改善,陪诊系统作为现代医院的一项重要创新,为病患和陪护人员提供了更加便捷、高效的服务体验。本文将全面介绍陪诊系统的功能、特点和优势,让您更好地了解和体验这一创新科技。 一、系统功能 陪诊系统旨在为病患和陪…...
[Tkinter 教程08] Canvas 图形绘制
python - [译][Tkinter 教程08] Canvas 图形绘制 - 个人文章 - SegmentFault 思否 一、简介 Canvas 为 Tkinter 提供了绘图功能. 其提供的图形组件包括 线形, 圆形, 图片, 甚至其他控件. Canvas 控件为绘制图形图表, 编辑图形, 自定义控件提供了可能. 在第一个例子里, …...
ES6 Symbol 数据结构
1. Symbol概念以及引入原因 ES6 引入了的一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、…...
Redis常用数据类型、Redis常用命令
Redis常用数据类型、Redis常用命令: Redis常用数据类型:1. 字符串String 类型2. 哈希hash 类型3. 列表list 类型4. 集合set 类型5. 有序集合sorted set / zset 类型 Redis常用命令:1. 字符串操作命令2. 哈希操作命令3. 列表操作命令4. 集合操…...
ERP系统是如何运作的?erp管理系统操作流程
ERP系统是如何运作的?ERP系统的运作流程是怎样的? 以简道云ERP管理系统为例: 各行各业适配的ERP系统>>>>https://www.jiandaoyun.com 可以看到上面那个流程图,一般来说,我们把ERP系统可以分为4个大的模…...
springBoot复杂对象表示和lombok的使用
springBoot复杂对象表示 前言简单案例lombok的使用通过properties文件进行绑定在yaml文件中使用 前言 对象:键值对的集合,如:映射(map)/哈希(hash)/字典(dictionary) 数组:一组按次…...
如何选择最适合你的LLM优化方法:全面微调、PEFT、提示工程和RAG对比分析
一、前言 自从ChatGPT问世以来,全球各地的企业都迫切希望利用大型语言模型(LLMs)来提升他们的产品和运营。虽然LLMs具有巨大的潜力,但存在一个问题:即使是最强大的预训练LLM也可能无法直接满足你的特定需求。其原因如…...
Jenkins实现CI/CD发布(Ansible/jenkins共享库/gitlab)
Jenkins实现多环境发布 1. 需求介绍 本人负责公司前端业务模块,由于前端模块较多,所以在编写jenkinsfile时会出现很多项目使用的大部分代码相同的情况,为解决这种问题,采用了jenkins的共享库方式优化,并且jenkins要支持…...
使用navicat查看类型颜色
问题描述: 最近遇到一个mongodb的数据问题。 在date日期数据中,混入了string类型的数据,导致查询视图报错: $add only supports numeric or date types解决办法: 使用类型颜色工具。 找到在last_modified_date字段中…...
iOS 中,Atomic 修饰 NSString、 NSArray,也会线程不安全
众所周知,基础类型如 int、float 的变量被 atomic 修饰后就具有原子性,则线程安全。 然而有些情况,atomic 修饰后不一定是线程安全的。 atomic 修饰 NSString,NSArray 的时候,只是保障首地址(数组名&…...
2023医药微信公众号排名榜top100汇总合集
相信每个医药人都或多或少关注了几个医药微信公众号,便于日常了解到最新的医药新闻包括治疗技术、药物研发、研究成果、医学进展、临床试验进展、市场动向等前沿动态。 笔者也不列外,大大小小的公众号收集了有上百个,本着方便查看的目的&…...
基于YOLO算法的单目相机2D测量(工件尺寸和物体尺寸)三
1.简介 1.1 2D测量技术 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造:在工业制造过程中,精确测量是确保产品质量和一致性的关键。基于单目相机的2D测量技术可以用于检测和测量零件尺寸、位置、形状等参数,进而实…...
Cython编译文件出错
报错信息: (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,因为我觉得将复杂问题简单化是最好的 如何组件化开发 主窗口引用 <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 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 2. 编程 矩阵转置: 遍历矩阵&#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)…...
户外运动盛行,运动品牌如何利用软文推广脱颖而出?
全民健康意识的提升和城市居民对亲近自然的渴望带来户外运动的盛行,这也使运动品牌的市场保持强劲发展势头,那么在激烈的市场竞争中,运动品牌应该如何脱颖而出呢?下面就让媒介盒子告诉你! 一、 分享户外运动干货 用户…...
2024年孝感市建筑类中级职称申报资料私企VS国企
2024年孝感市建筑类中级职称申报资料私企VS国企 民营企业中级职称申报跟事业单位或者是国企申报中级职称流程不一样么?实际上流程基本都是相同的,就是提交纸质版资料有点不一样。 孝感市建筑类中级职称申报基本流程 1.参加建筑类中级职称水平能力测试。 …...
OpenResty安装
OpenResty 是一个基于 Nginx 的 Web 平台,它将 Nginx 和 Lua 脚本语言结合起来,提供了更强大的 Web 应用开发和部署能力。OpenResty 仓库是 OpenResty 项目的官方仓库,包含了 OpenResty 的源代码、文档、示例等资源。 OpenResty 仓库地址是&…...
通过stream对list集合中对象的多个字段进行去重
记录下通过stream流对list集合中对象的多个字段进行去重! 举个栗子,对象book,我们要通过姓名和价格这两个字段的值进行去重,该这么做呢? distinct()返回由该流的不同元素组成的流。distinct&am…...
招投标系统软件源码,招投标全流程在线化管理
功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…...
css设置文本溢出隐藏...
在CSS中,文本溢出可以使用text-overflow属性来处理,下面分别介绍单行文本溢出和多行文本溢出的处理方法1: 单行文本溢出。需要使用text-overflow: ellipsis;来显示省略号。需要注意的是,为了兼容部分浏览器,还需要设置…...
【小尘送书-第八期】《小团队管理:如何轻松带出1+1>2的团队》
大家好,我是小尘,欢迎你的关注!大家可以一起交流学习!欢迎大家在CSDN后台私信我!一起讨论学习,讨论如何找到满意的工作! 👨💻博主主页:小尘要自信 …...
【网络协议】聊聊ifconfig
我们知道在linux是ifconfig查看ip地址,但是ip addr也可以查看 IP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。 从IP地址的划分来看,C类地址只可以容纳254个,而B类6W多,那么又没有一种折中的…...
python项目之AI动物识别工具的设计与实现(django)
项目介绍: 💕💕作者:落落 💕💕个人简介:混迹java圈十余年,擅长Java、小程序、Python等。 💕💕各类成品java毕设 。javaweb,ssm,spring…...
全流量安全分析发现内部系统外联异常
内部系统外连监控的重要性在于保护企业的信息安全和预防数据泄露,以下是几个重要的理由: 1、检测异常活动:通过监控内部系统的外连连接,可以及时发现是否有未经授权或异常的链接尝试。这可能表示存在恶意软件、黑客攻击或内部员工…...
Edge---微软浏览器-兼容性问题-解决办法(详细)
图片现象: 快捷键:winR (进入管理员命令窗口) 输入:regedit (进入注册表编辑器) 点击文件夹:HKEY_LOCAL_MACHINE 找到这个路径的文件项:HKEY_LOCAL_MACHINE\SOFTWARE…...
网站的优化方案/网站推广优化平台
利用VR全景技术可进行3D可视化模型展示,商迪3D可以让你720度无死角进行观看产品,并且可以与之产生互动。发动机展示运用3D可视化技术,可以让用户在PC端上或者移动端上进行预览,可谓是相当方便、快捷。通过在线展示的形式ÿ…...
教师在哪些网站可以做兼职/线上推广有哪些平台效果好
前言 程序员这个行业,日新月异,技术体系更新速度快,新技术新框架层出不穷,所有的技术都像是一个无底洞,当你学得越多就会发现不懂的越多,不懂的越多,需要学习的就更多。 因此,一旦…...
seo做的最好的十个网站/泰安seo网络公司
flex 结合sandy引擎创作 (1) http://blog.csdn.net/hero82748274/archive/2009/01/22/3850800.aspx 之前利用flex创建一个立方体,但是还没有贴图,以及互动。在这里我们添加一些额外的操作,包括鼠标 和键盘的操作。以及…...
wordpress积分查看隐藏内容/免费制作永久个人网站
1、执行如下代码返回的结果如何? printf(“%d”,sizeof A); 本以为会输出:1,结果输出的是:4; 但是如果是这样: char cval; printf(“%d”,sizeof(cval)); 输出结果是:1; 但是在C中&a…...
成都私人做网站/什么是核心关键词
虽然DOM 为与XML 及HTML 文档交互制定了一系列核心API,但仍然有几个规范对标准的DOM进行了扩展。这些扩展中有很多原来是浏览器专有的,但后来成为了事实标准,于是其他浏览器也都提供了相同的实现。 转载于:https://www.cnblogs.com/xiao-baob…...
厚街镇做网站/怎么做网址
Computing Values from a DataTablehttp://aspnet.4guysfromrolla.com/articles/082003-1.aspx 转载于:https://www.cnblogs.com/Box/archive/2006/12/07/585355.html...