JavaSE——进制转换、原码、反码、补码、位运算(左移、右移、取反)

news2024/12/27 13:33:48

目录

一、四种进制介绍

二、进制的转换 

(一)二进制—>十进制

(二)八进制—>十进制

(三)十六进制—>十进制

(四)十进制—>二进制

(五)十进制—>八进制

(六)十进制—>十六进制

(七)二进制—>八进制

(八)二进制—>十六进制

(九)八进制—>二进制

(十)十六进制—>二进制

三、原码、反码、补码

(一)原码

(二)反码

(三)补码

四、位运算

1.按位与 &

2.按位或 |  

3. 异或 ^

4.左移 <<

5. 右移 >>

6.无符号右移 >>>

7. 取反 ~


一、四种进制介绍

对于整数,有四种表示方式:

  1. 二进制(BIN):0,1,满2进1,以0b或0B开头。
  2. 十进制(OCT):0-9,满10进1。
  3. 八进制(DEC):0-7,满8进1,以数字0开头表示。
  4. 十六进制(HEX):0-9及A(10)、B(11)、C(12)、D(13)、E(14)、F(15),满16进1,以0x或0X开头表示。此处的A-F不区分大小写。
public static void main(String[] args) {
    // 二进制
    int n1 = 0b1010;
    // 十进制
    int n2 = 1010;
    // 八进制
    int n3 = 01010;
    // 十六进制
    int n4 = 0x10101;
    System.out.println("n1=" + n1); // n1=10
    System.out.println("n2=" + n2); // n2=1010
    System.out.println("n3=" + n3); // n3=520
    System.out.println("n4=" + n4); // n4=65793
}

 进制的图示:

二、进制的转换 

(一)二进制—>十进制

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

案例:0b1011转为十进制。

0b1011  =1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11

(二)八进制—>十进制

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。

案例:0234转成十进制。

0234=4*8^0 + 3*8^1 + 2*8^2 + 0*8^3 = 4 + 24 + 128 = 156

(三)十六进制—>十进制

规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

案例:0x23A转为十进制。

23A=10*16^0 + 3*16^1 + 2*16^2 = 10 + 48 + 512 = 570

小练习:将0b110001100、02456、0xA45分别转成十进制

0b110001100 = 0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 0*2^4 + 0*2^5 + 0*2^6 + 1*2^7 + 1*2^8

                        = 4+8+128+256=396

02456=6*8^0 + 5*8^1 + 4*8^2 + 2*8^3 = 6+40+256+1024 = 1326

A45 = 5*16^0 + 4*16^1 + 10*16^2 = 5 + 64 + 2560 = 2629

(四)十进制—>二进制

规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

案例:34转为二进制。

一个字节有8位,100010是6位,不够8位,前面需要用0补位,所以最终结果:0B00100010

(五)十进制—>八进制

规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。

案例:131转为八进制

因为八进制是0开头,所以要在203前面补上0,结果为0203

(六)十进制—>十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

案例:237转为十六进制

因为十六进制是0x开头的,所以结果为0xED

小练习:

123转成二进制=0b01111011

678转成八进制=01246

8912转成十六进制=0x22D0

(七)二进制—>八进制

规则:从低位开始,将二进制数每三位一组,最高位不足三位,补0。三位以内,按照二进制转十进制的转换规则进行运算。产生的八进制数字按顺序排列

例:0b11010101转成八进制。

011010101  => 011是3  010是2   101是5   =>八进制为:0325

(八)二进制—>十六进制

规则:从低位次起,每四位看作一组,产生一个十六进制数字,最高位不足四位,补0。四位以内,按照二进制转十进制的转换规则进行运算。产生的十六进制数字按顺序排列。

案例:0b11010101

11010101  => 1101是13  0101是5  => 十六进制为:0xD5

小练习:

0b11100101转成八进制=>0345

0b1110010110转成十六进制=>0x396

(九)八进制—>二进制

规则:将八进制数每1位,转成对应的一个3位的二进制数即可。

案例:0237转成二进制。

02(010)3(011)7(111) = 0b010011111 = 0b10011111

(十)十六进制—>二进制

规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。

案例:0x23B转为二进制

0x2(0010)3(0011)B(1011) =0b001000111011

小练习:

01230转成二进制                01(001)2(010)3(011)0(000) => 0b001010011000

0xAB29转成二进制              A(1010)B(1011)2(0010)9(1001) => 0b1010101100101001

三、原码、反码、补码

二进制在运算中的说明

  1. 二进制是逢2进位的进位制,0、1是基本运算符。
  2. 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

(一)原码

所有的数据在底层都是二进制数据的补码形式存储的

一个数字分为符号位和数值位,1代表负数,0代表正数,符号位在最高位

对于正数来说,原码反码和补码都一样

符号位数值位
-510000101
500000101

(二)反码

负数的反码是在原码的基础上符号位不变,其他位按位取反

符号位数值位
-511111010
500000101

(三)补码

负数的补码是在反码基础上加1

符号位数值位
-511111011
500000101

四、位运算

前提:要把数据转换成二进制数据的补码形式进行运算

位运算是更底层的运算符,效率更高。

1.按位与 &

按位与 &:两个操作数中都是1,结果是1,否则结果是0

  • 任意一个数&一个偶数,结果一定是偶数

  • 任意一个数&1,如果结果是0,就是一个偶数

int a = 10;
if((a & 1) == 0){
    System.out.println("偶数"); // 偶数
}

2.按位或 |  

按位或 | :两个位中只要有一个是1,那么结果就是1,否则就是0

  • 任意一个数 | 一个奇数,结果一定是奇数

  • 任意一个数与0或,结果还是自身

3. 异或 ^

异或 ^:两个操作数中,相同结果是0,不同结果是1

  • 任何数异或自己都是0,异或0都是自身

int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;// b = a ^ b ^ b;  b = a
a = a ^ b;// a = a ^ b ^ a   a = b
System.out.println(a);
System.out.println(b);

4.左移 <<

左移 << :左边的丢弃,右边补0。左移n位就是乘以2的n次方

3 << 2     相当于3*2的2次方=12
    0000 0011
   00 001100

5. 右移 >>

右移 >> :右边丢弃,左边补位(正数补0,负数补1) 对于正数来说,右移n位就是除以2的n次方 

5 >> 2 		相当于5除以2的2次方=1
       0000 0101
	     000000 01

6.无符号右移 >>>

无符号右移 >>> :和右移类似,但是最高位永远是补0

7. 取反 ~

取反 ~ :结论: ~i = -i - 1

~3  0000 0011
    1111 1100
    - 128 + + 60 + 64

练习:-5 >> 2

一定要注意:要把数据转换成二进制数据的补码形式进行运算!!!

原码:1000 0101
反码:1111 1010
补码:1111 1011
 右移2位后的补码    111111 10
反码 1111 1101
原码 1000 0010  -2

结果为:-2

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

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

相关文章

免费升级!Windows10 64位国庆特别版:包含最新安全补丁!

国庆佳节临近&#xff0c;系统之家小编给大家带来了Windows10 64位国庆特别版&#xff0c;该版本系统以最新Windows10 22H2专业版系统为基础&#xff0c;展开离线制作与优化&#xff0c;安全无毒&#xff0c;且运作更加流畅稳定&#xff0c;建议大家升级。Windows10 64位国庆特…

华为OD机试 - 三阶积幻方(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

长沙惠科成功完成SAP S/4 1511到S/4 2021的无缝升级,实现“停机不停产”

关于HKC长沙惠科光电有限公司 长沙惠科光电有限公司于2019年9月20日落户于长沙市浏阳经济技术开发区&#xff0c;注册资本220亿元人民币&#xff0c;由惠科股份有限公司与湖南金阳投资集团、浏阳市城市建设集团有限公司共同出资&#xff0c;是惠科股份有限公司下属的第四家专业…

WebAssembly 为什么能提升性能,怎么使用它 ?

文章目录 简介&#xff1a;起源&#xff1a;前端性能提升历史JIT&#xff08;Just-In-Time&#xff09;编译器(即时编译) 为什么需要WebAssembly&#xff1a;WebAssembly能做什么&#xff1a;经常说WASM的性能高&#xff0c;为什么高&#xff1f;&#xff1f;使用方法:Emscript…

《OpenCV 计算机视觉》—— 视频背景建模

还未写完&#xff01;&#xff01;&#xff01; 完整代码如下&#xff1a; import cv2cap cv2.VideoCapture(test.avi)""" getstructuringElement(shape&#xff0c;ksize,anchorNone)得到一个卷积核。主要用于后续的腐蚀、膨胀、开、闭等运算。 参数:shape:设…

Redis进阶篇 - 缓存穿透、缓存击穿、缓存雪崩问题及其解决方案

文章目录 1 文章概述2 缓存穿透2.1 什么是缓存穿透&#xff1f;2.2 缓存穿透的解决方法2.2.1 做好参数校验2.2.2 缓存无效Key2.2.3 使用布隆过滤器2.2.4 接口限流 3 缓存击穿3.1 什么是缓存击穿&#xff1f;3.2 缓存击穿的解决方法3.2.1 调整热点数据过期时间3.2.2 热点数据预热…

docker环境下配置cerbot获取免费ssl证书并自动续期

文章目录 实践场景了解certbot查看nginx的映射情况操作目标配置nginx配置的ssl证书设置自动续签 实践场景 本人使用docker部署了一个nginx容器&#xff0c;通过容器卷&#xff0c;实现本地html&#xff0c;ssl&#xff0c;conf和ngiinx容器映射的&#xff0c; 经常需要手动部署…

WPS在表格中填写材料时,内容过多导致表格不换页,其余内容无法正常显示 以及 内容过多,导致表格换页——解决方法

一、现象 1&#xff0c;内容过多导致表格不换页&#xff0c;其余内容无法正常显示 2&#xff0c;内容过多&#xff0c;导致表格换页 二、解决方法 在表格内右击&#xff0c;选择表格属性 在菜单栏选择行&#xff0c;勾选允许跨页断行&#xff0c;点击确定即可 1&#xff0…

react+antdMobie实现消息通知页面样式

一、实现效果 二、代码 import React, { useEffect, useState } from react; import style from ./style/index.less; import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from antd-mobile; //消息通知页面 export default function Notification(props) {const [opti…

Kafka学习笔记(三)Kafka分区和副本机制、自定义分区、消费者指定分区

文章目录 前言7 分区和副本机制7.1 生产者分区写入策略7.1.1 轮询分区策略7.1.2 随机分区策略7.1.3 按key分区分配策略7.1.4 自定义分区策略7.1.4.1 实现Partitioner接口7.1.4.2 实现分区逻辑7.1.4.3 配置使用自定义分区器7.1.4.4 分区测试 7.2 消费者分区分配策略7.2.1 RangeA…

【MySQL】常见的SQL优化方式(二)

目录 1、limit 优化 &#xff08;1&#xff09;延迟关联&#xff08;索引覆盖子查询&#xff09; &#xff08;2&#xff09; 已知位置查询 2、group by 优化 &#xff08;1&#xff09;使用索引 &#xff08;2&#xff09;避免排序 &#xff08;3&#xff09;分析查询 …

LeetCode[中等] 739. 每日温度

给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 思路 栈 暴力法为遍历列…

毕业论文不会写?教你如何利用AI来帮我完成初稿

AI是个工具&#xff0c;它能帮你提高效率&#xff0c;但可不能完全替代你的工作。所以&#xff0c;你要做的是学会如何利用AI来辅助你的毕业论文写作。 writehelp智能写作辅导&#xff1a;可节约1000小时写作时间帮助快速完成初稿的撰写。 传送门&#xff1a;http://www.write…

Qt Linguist手册-翻译员

翻译人员 Qt Linguist 是为 Qt 应用程序添加翻译的工具。一旦安装了 Qt&#xff0c;就可以像开发主机上的其他应用程序一样启动 Qt Linguist。 Qt Linguist 主窗口包含一个菜单栏和以下视图&#xff1a; 上下文 (F6) 用于从上下文列表中选择要翻译的字符串。字符串 (F7) 用于…

软考中级网络工程师下午题近五年笔记

刷题地址&#xff1a;软考达人—专业的软考刷题题库&#xff0c;软考历年真题&#xff0c;软考模拟考试&#xff0c;软考考前押题。柴丁科技 (ruankaodaren.com) 上面这个网站有的图不清晰&#xff0c;也可以看这个网站策未来网校——在线刷题、智能刷题 (ceweilai.cn) 2019…

[leetcode] 71. 简化路径

文章目录 题目描述解题方法栈java代码复杂度分析 题目描述 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下&#xff1…

springboot+大数据+基于协同过滤算法的校园食堂订餐系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

25:stm32的低功耗模式

低功耗模式 1、PWR电源控制2、低功耗模式 1、PWR电源控制 PWR&#xff08;Power Control&#xff09;电源控制。PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能&#xff0c;这里我们只学习低功耗模式的功能&#xff0c;低功耗模式…

【AI】AIOT简介

随着技术的快速发展&#xff0c;人工智能AI和物联网IoT已经成为当今最热门的技术领域。AIOT是人工智能和物联网的结合&#xff0c;使物联网设备更加智能化&#xff0c;能够进行自主决策和学习的技术。 通过物联网产生、收集来自不同维度的、海量的数据存储于云端、边缘端&#…

Netty源码-业务流程之写数据

Netty基本介绍&#xff0c;参考 Netty与网络编程 1、源码分析&#xff0c;EchoServerHandler之Write流程 1.1 write流程入口 通常我们通过ChannelRead收到消息后&#xff0c;需要给一个响应&#xff0c;通过ctx.write()将响应返回客户端。 在自定义handler的channelRead方法…