Java基础快速入门:进制、位运算与数组操作

【Java基础】【进制转换&&基础练习】(2) ​二维数组也是一种容器,不同于一维数组,该容器存储的都是一维数组容器学习视频:大厂面试真题:I : 数组中存储的数据类型[[ : 几个中括号就代表的是几维数组*//*二维数组存储一维数组的时候, 存储的是一维数组的内存地址*/// 向二维数组中存储元素// 从二维数组中取出元素并打印学习视频:[外链图片转存中… 阅读详情

本文纲要

  1. 进制介绍与Java书写格式
  2. 任意进制转十进制
  3. 十进制转任意进制
  4. 快速进制转换法(8421码)
  5. 原码、反码、补码
  6. 位运算 - 基本位运算符
  7. 位运算 - 位移运算符
  8. 案例:数据交换
  9. 案例:数组反转

进制介绍与Java书写格式

计算机底层使用二进制进行运算与存储,但在开发中我们也会接触到八进制、十进制、十六进制。
掌握这些进制及它们在Java中的书写方式,有助于理解底层原理。

进制规则Java书写格式
十进制逢十进一,借一当十,默认数值类型直接书写,如 10
二进制逢二进一,借一当二,只有 0 和 10b 开头,如 0b10,b 大小写均可
八进制逢八进一,借一当八0 开头,如 010
十六进制逢十六进一,借一当十六,用 0-9 和 a-f 表示0x 开头,如 0x10,x 大小写均可

注意事项

  • 上述进制标识从 JDK7 开始支持。
  • 控制台打印时,无论代码中书写何种进制,最终展示的都是 十进制 数值。

示例

// Demo1.java 
package com.wb.demo;
 
public class Demo1 {
    public static void main(String[] args) {
        System.out.println(10);
        System.out.println("二进制数据0b10的十进制表示为:" + 0b10);   // 2 
        System.out.println("八进制数据010的十进制表示为:" + 010);     // 8 
        System.out.println("十六进制数据0x10的十进制表示为:" + 0x10); // 16 
    }
}

任意进制转十进制

1 )公式

系数 × 基数^权次幂 再求和

  • 系数:每一位上的数字
  • 基数:当前进制的基,如二进制基数是2,十六进制是16
  • 权:从数字最右边开始,编号为0,依次向左递增
  • 再求和: 各项结果相加

示例:二进制 0b100 转十进制

系数基数权次幂计算结果
1221×2²=4
0210
0200

求和:4 + 0 + 0 = 4

示例:十六进制 0x100 转十进制

系数基数权次幂计算结果
11621×16²=256
01610
01600

求和:256。

该公式适用于 任意进制转十进制。

十进制转任意进制

公式:除基取余,商为0时停止,余数倒序排列。

示例:十进制 11 转二进制

除基商余数
11÷251
5÷221
2÷210
1÷201

余数倒序:1011,所以 11(10) = 1011(2)

示例:十进制 60 转十六进制

除基商余数
60÷16312©
3÷1603

余数倒序:3C,所以 60(10) = 0x3C

快速进制转换法(8421码)

1 ) 8421码(BCD代码)

将二进制每一位对应的固定值记下,直接累加即可快速得到十进制值

二进制位权重1286432168421
对应二进制位b7b6b5b4b3b2b1b0
  • 二进制位为 1 时,取该位权重并相加;为 0 则忽略

2 ) 二进制转十进制示例

  • 二进制: 0b 1 1 0 1
  • 权重: 8 4 2 1
  • 取1的位: 8 + 4 + 1 = 13

3 ) 二进制转八进制

将二进制从右向左每 3位 一组(因为八进制最大为7,3位二进制最大为7),每组按8421码求和,结果拼在一起。

二进制: 0b 11 1100
分组: 011 110 (补零对齐)
8421: 0+2+1=3 4+2+0=6
八进制: 36

Java中没有直接的八进制转换API,但此方法适合手算理解。

4 ) 二进制转十六进制

每 4位 一组(十六进制最大为15),每组求和,大于9的用字母表示。

二进制: 0b 11 1100
分组: 0011 1100
8421: 2+1=3 8+4=12 → C
十六进制: 3C

原码、反码、补码

计算机中的数据以 二进制补码 形式运算,而原码用来直观查看数值大小,反码是转换过程的中间状态。

  • 原码:最高位为符号位(0正1负),其余位表示数值。
  • 反码:正数的反码等于原码;负数反码为原码除符号位外按位取反。
  • 补码:正数的补码等于原码;负数补码为反码末位加一。

示例:int 强转为 byte 的解释

Java中 int 占4字节,byte 占1字节。将 130 强转为 byte 会发生精度损失,结果为 -126。

过程如下:

  1. 130 的 int 原码(补码相同,正数):
    00000000 00000000 00000000 10000010
  2. 强转为 byte 截取低8位:10000010 (此时已是补码,且符号位为1,表示负数)
  3. 补码求原码:
    补码减1得反码:10000001
    反码取反(符号位不变)得原码:11111110
    原码对应的十进制:-(2+4+8+16+32+64) = -126

位运算 - 基本位运算符

位运算符直接对整数的二进制位操作,运算速度快。二进制位中,1 表示 true,0 表示 false。

运算符名称运算规则
&位与全1才1(有0则0)
`位或有1则1
^位异或相同为0,不同为1
~取反所有位(含符号位)0变1,1变0

示例代码

// Demo2.java 
package com.wb.demo;
 
public class Demo2 {
    public static void main(String[] args) {
        System.out.println(6 & 2);   // 2 
        System.out.println(~6);      // -7 
    }
}

运算过程分析

6 & 2:

   00000000 00000000 00000000 00000110  (6)`
&  00000000 00000000 00000000 00000010  (2)`
-----------------------------------------
   00000000 00000000 00000000 00000010  → 2

~ 6:

  00000000 00000000 00000000 00000110  (6 的补码)
~ 11111111 11111111 11111111 11111001  (取反后仍为补码)

得到的是负数的补码,反推原码:

补码减 1 :             11111111 11111111 11111111 11111000 (反码)
反码取反(符号位不变):    10000000 00000000 00000000 00000111 → -7

位运算 - 位移运算符

运算符名称运算规律
<<有符号左移左移 n 位相当于乘 2^n,右侧补 0
>>有符号右移右移 n 位相当于除 2^n,左侧补符号位
>>>无符号右移右移 n 位,左侧一律补 0(很少使用)

示例代码

// Demo3.java 
package com.wb.demo;
 
public class Demo3 {
    public static void main(String[] args) {
        System.out.println(12 << 1);  // 24 
        System.out.println(12 << 2);  // 48 
    }
}

12 << 2 运算过程:

12 二进制(补零至8位示意): 00001100
左移2位: 00110000 → 十进制 48

符号位丢弃,右侧补 0

案例:数据交换

1 ) 方式一:使用临时变量

最常用、最易读的交换方式

// Test1.java 
package com.wb.test;
 
public class Test1 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
 
        int temp = a;
        a = b;
        b = temp;
 
        System.out.println("a=" + a);  // 20 
        System.out.println("b=" + b);  // 10 
    }
}

2 ) 方式二:利用异或运算
利用异或特性:一个数异或另一个数两次,结果不变

// Test1_1.java 
package com.wb.test;
 
public class Test1_1 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
 
        a = a ^ b;
        b = a ^ b;   // b = (a^b) ^ b = a 
        a = a ^ b;   // a = (a^b) ^ a = b 
 
        System.out.println("a=" + a);
        System.out.println("b=" + b);
    }
}

验证异或特性的例子

// Demo4.java 
package com.wb.demo;
 
public class Demo4 {
    public static void main(String[] args) {
        System.out.println(10 ^ 5 ^ 10); // 结果还是 5 
    }
}

实际开发建议使用临时变量方式,异或方式多出现在面试题中

案例:数组反转

需求:将数组 {19, 28, 37, 46, 50} 反转为 {50, 46, 37, 28, 19}

核心思路

使用 双指针 分别指向数组首尾,交换元素后指针向中间移动,直到指针相遇

1 ) 第一步:手动交换首尾元素(理解基础)

// Test2_2.java 
package com.wb.test;
 
public class Test2_2 {
    public static void main(String[] args) {
        int[] arr = {11, 22, 33, 44, 55};
        // 交换 arr[0] 和 arr[4]
        int temp = arr[0];
        arr[0] = arr[4];
        arr[4] = temp;
 
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

2 )第二步:使用循环完成整个反转

// Test2.java 
package com.wb.test;
 
public class Test2 {
    public static void main(String[] args) {
        int[] arr = {19, 28, 37, 46, 50};
        // 双指针 
        int start = 0;
        int end = arr.length - 1;
 
        // 当 start < end 时进行交换 
        for ( ; start < end; start++, end--) {
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
 
        // 遍历输出反转后的数组 
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

3 ) 循环的另一种紧凑写法(在 for 初始化中定义双指针):

for(int start = 0, end = arr.length - 1; start < end; start++, end--) {
    int temp = arr[start];
    arr[start] = arr[end];
    arr[end] = temp;
}

总结

本文介绍了Java中常见的进制表示与转换、原反补码的运作原理以及位运算、位移运算,并结合经典案例“数据交换”和“数组反转”加深理解。

这些基础知识是理解Java底层运算和阅读源码的重要铺垫。

Java基础之十进制 1.Debug模式1.1 什么是Debug模式是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。1.2 Debug介绍与操作流程·如何加断点o选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可·如何运行加了断点的程序o在代码区域右键Debug执行·看哪里o看Debugger窗口o看Console窗口·点哪里o点Step Into (F7)这个箭头,也可以直接按F7·如何删除断点o选择要删除的断点,单击鼠标左键即可o如果是多个断点,可以每一个再点击一次。也 阅读详情

相关推荐

Java位运算详解与应用

位运算是处理二进制数据的基础,它可以用来表示和操作计算机内的数据。在数据压缩、加密算法、网络协议等领域,位运算都是不可或缺的工具。例如,在设计一种新的数据压缩算法时,我们可以利用位运算来处理数据的二进制位,通过位移和逻辑运算来提高数据的压缩率和效率。

weixin_36064575的博客 1104

【优选算法 & 位运算】位运算算法入门详解:常见位运算总结

【优选算法 & 位运算】位运算算法入门详解:常见位运算总结

OuO-1 的博客 1114

Java基础精讲:类型转换、二进制输出及三维数组打印

本文还有配套的精品资源,点击获取 简介:在【IT十八掌徐培成】Java基础第04天的课程中,徐培成讲师深入讲解了Java编程的关键知识点。课程内容包括:Byte范围变换,涵盖了byte类型值的范围及其在不同数据类型间的转换方法;二进制格式输出,介绍了如何使用Java标准库中的类和方法来输出二进制数据;三维数组横向打印,教授了如何通过嵌套循环实现三维数组的横向输出。此外,讲师...

weixin_42527589的博客 953

Java基础(四):位运算符详解

🔥 揭秘Java位运算:7大运算符详解 + 63%性能提升秘籍,解锁底层高效编程利器!

从基础到源码解析的学习记录 2283

从零开始,用MATLAB/Simulink手把手搭建一个无刷直流电机(BLDC)的控制模型

本文详细介绍了如何使用MATLAB/Simulink从零开始搭建无刷直流电机(BLDC)控制模型。通过可视化建模方法,避开繁琐的数学推导,直接构建三相逆变器、电机本体参数化模型、霍尔传感器与换相逻辑实现,以及速度闭环控制设计。文章还提供了PID控制器整定、抗饱和处理和系统调试的实用技巧,帮助工程师快速掌握BLDC控制系统的仿真与实现。

weixin_27741699的博客 256

从MCU到MPU:瑞萨RZN2L上手初体验,给Cortex-M工程师的Cortex-R52入门避坑指南

本文详细介绍了从MCU到MPU的过渡经验,特别是瑞萨RZN2L开发板的实战避坑指南。针对Cortex-M工程师转向Cortex-R52内核的挑战,文章深入解析了启动流程、内存管理、中断响应等九大本质差异,并提供了硬件设计陷阱和软件迁移的实用技巧,帮助开发者快速适应MPU开发环境。

weixin_29158413的博客 258

二进制与位运算(暴力枚举)

二进制与位运算

G121121W的博客 2095

单细胞转录组聚类分析R包——SC3的应用

前言 在做单细胞相关聚类分析的过程中,为了研究异质性,发现了一种专门用于单细胞转录组的聚类分析R包——SC3(single cell consensus clustering,单细胞一致性聚类)。该聚类算法发表于Nature Methods(2017),能够让单细胞RNA-seq基于转录组特征对细胞类型进行定量表征。这是一种用户友好的无监督聚类工具,它通过一致方法将多个聚类解决方案组合在一起,从而得到高精度和鲁棒性的分群结果。SC3包的官方具体使用教程见:http://www.bioconductor.or

m0_51042606的博客 5005

JAVA中的位运算与二进制操作

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!

2301_82241883的博客 1070

Robocup3d

一、 比赛介绍 RoboCup 仿真比赛是一个能为多智能体系统和模拟智能进行研究、教育的工具。比赛是在一个标准的计算机环境中进行的,提供了一个完全分布式控制、实时异步多智能体环境。通过这个平台,可以测试各种理论、算法和Agent体系结构。在实时异步、有噪声的对抗环境中,研究多智能体的合作对抗问题。当然,仿真组的比赛使用的机器人并非是真的机器人。一个机器人是一个Agent, 它拥有自己的大脑,

zhanghe2775115的专栏 7268

Linux新手必看:FinalShell连接不上?从检查IP到配置固定地址的完整排错指南

本文为Linux新手提供了FinalShell连接失败的完整排错指南,涵盖IP检查、SSH服务状态、防火墙配置和静态IP设置等关键步骤。通过详细的命令行操作和配置示例,帮助用户快速解决远程连接问题,提升Linux使用效率。

weixin_30675247的博客 754

Java位运算的一些骚操作,你知道几个?

今天来总结一下Java中的位运算,并介绍几个位运算的骚操作,有多骚?请坐稳扶好,下面发车???? 文章目录1. 位运算基本介绍1.1. 位运算适用的数据类型1.2. 位运算介绍1.3. 对异或的理解 1. 位运算基本介绍 1.1. 位运算适用的数据类型 在Java中,位运算适用于基础数据类型中的整数类型,即byte,short,char,int,long ,引用类型,布尔类型,浮点类型不可以使用。 byte,short,char类型在使用位运算的时候会被转换为int类型(符号位扩展),其结果也是int类

张凯 1万+

【行为决策模块项目实战】解耦控制--多控制器管理与切换的方法(附C++代码)

[请添加图片描述](https://img-blog.csdnimg.cn/c11300d9e4fe421e9070f474a468d1db.jpeg)本文先对多控制器管理与切换的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容VERTICAL_VEL, //垂直速度PID控制器VERTICAL_POS, //垂直位置PID控制器HORIZONTAL, //水平速度PID控制器YAW, //航向角yaw位置逻辑控制器。

qq_35635374的博客 1211

【Java基础】【进制转换&&基础练习】

代码 :/*十进制:Java中,数值默认都是10进制,不需要加任何修饰。二进制:数值前面以0b开头,b大小写都可以。八进制:数值前面以0开头。十六进制:数值前面以0x开头,x大小写都可以。注意: 书写的时候, 虽然加入了进制的标识, 但打印在控制台展示的都是十进制数据.*/System.out.println(“二进制数据0b10的十进制表示为:” + 0b10);System.out.println(“八进制数据010的十进制表示为:” + 010);

m0_61499908的博客 696

【unity实战】使用unity的Navigation+LineRenderer实现一个3D人物寻路提前指示预测移动轨迹的效果,并可以适配不同的地形

本文介绍了在Unity中使用Navigation导航系统和LineRenderer实现3D人物寻路轨迹预测效果的方法。通过NavMesh.CalculatePath计算路径点,结合Physics.Raycast进行地面点投射,将路径点赋予LineRenderer渲染出移动轨迹。关键点包括:1)利用NavMesh.CalculatePath计算两点间可行走路径;2)通过射线检测获取地面点提高路径适配性;3)使用协程定期更新路径绘制。文章还提供了完整代码实现,并说明需要将地面图层设置为Ground并进行导航网格

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 461

2026.2.3:OpenClaw国内安装教程,国内网络使用,服务器部署,对接飞书

本文介绍了如何创建飞书应用并接入OpenClaw机器人的完整流程。主要内容包括:1)在飞书开放平台创建企业自建应用,添加机器人能力并开通相关权限;2)在Windows11系统上安装OpenClaw,完成配置文件的修改(需将bind改为"lan");3)配置MiniMax国内接口地址,重启gateway服务。整个过程涵盖了应用创建、权限设置、软件安装、服务配置等关键步骤,为开发者提供了详细的飞书机器人接入指南。

拥抱具身智能,昇腾Ascend C 4001

位运算详解:从入门到进阶,一篇搞定所有位操作技巧

位运算(Bitwise Operation)是指直接对整数在内存中的二进制位(bit)进行操作的运算。计算机中所有的数据最终都以二进制形式存储,而位运算就是最接近"硬件"的一层运算。与普通的算术运算(加减乘除)不同,位运算的操作对象是"位"而不是"数"。一个int类型的整数在 32 位机器上占 4 个字节、32 个二进制位,位运算就是在这 32 个位上逐位进行逻辑操作。为什么要学位运算?因为它是性能、状态压缩、算法优化的底层基石,在面试和算法竞赛中几乎必考。位运算是一把双刃剑。

2502_94387000的博客 660

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

CTF逆向入门[零基础][快速入门]

为了一探究,我们找到了他们的变量定义,然后双击进入汇编代码,发现这几个变量内存地址是连续的,结合C/C++中数组的内存是连续且有序的,我们直接选中这11个连续的地址然后转化为数组,我们回到伪代码一看,原本的伪代码已经更接近源码了!因此要求我们拥有如下。转换的时候,将 3 字节的数据,先后放入一个 24 位的缓冲区中,先来的字节占高位。,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。

qq_58386305的博客 1818

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java 进制与位运算

Java 进制与位运算 1 进制的介绍与书写格式 代码 : public class Demo1 { /* 十进制:Java中,数值默认都是10进制,不需要加任何修饰。 二进制:数值前面以0b开头,b大小写都可以。 八进制:数值前面以0开头。 十六进制:数值前面以0x开头,x大小写都可以。 注意: 书写的时候, 虽然加入了进制的标识, 但打印在控制台展示的都是十进制数据. */ public stat

weixin_42622803的博客 356

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

进制转换与位运算

进制转换 int p = 15;//long Long.toString(); Long.parseInt(); String str = Integer.toString(p, 2);// 前一个参数是10进制数,后一个数是想要转换的进制 System.out.println(str); int q = Integer.parseInt(str, 2);// 后一个参数表示前一个字符串的进制,转换为10进制表示 System.out.println(q);

一条咸鱼的博客 2546

【01】Java基础:06-debug、进制、位运算

1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。 1.2 Debug介绍与操作流程 如何加断点 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可 如何运行加了断点的程序 在代码区域右键Debug执行 看哪里 看Debugger窗口 看Console窗口 点哪里 点Step Into (F7)这个箭头,也可以直接按F7 如何删除断点 选择要删除的断点,单击

忘尘丶莫负的博客 304

【常用的二进制操作+位运算常见陷阱】

位运算常见陷阱表格总结位运算常见陷阱陷阱类型典型错误代码/现象正确写法/注意点说明/备注符号位右移a >> n(负数高位补1)Java中无符号右移用a >>> n>>带符号,>>>无符号(Java)位移超界a << 32位移量不能≥类型位数Java中a << 32等价于a << 0运算符优先级a & 1 == 1位运算优先级低于比较运算负数与掩码-1 & 0xFF得到255明确是否需要无符号结果常用于字节转无符号整型类型提升c`掩码写错1 << 32位移量要小于类型位数。

getIt的博客 504

【Java基础】【进制转换&&基础练习】(1)

​二维数组也是一种容器,不同于一维数组,该容器存储的都是一维数组容器现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。;// 向二维数组中存储元素// 从二维数组中取出元素并打印。

2301_82241647的博客 936

[java入门到精通] 05 进制与二维数组

进制:指进位制,是人们规定的一种进位方式表示某一位置上的数,运算时是逢X进一位。十进制是逢十进一,二进制就是逢二进一,八进制是逢八进一常见进制:二进制,八进制,十进制,十六进制原码(可直观看出数据大小)就是二进制定点表示法,即最高位为符号位,【0】表示正,【1】表示负,其余位表示数值的大小。通过一个字节表示+7和-7,代码:byte b1 = 7;一个字节等于8个比特位,也就是8个二进制位0(符号位) 00001111(符号位) 0000111反码正数的反码与其原码相同;

2301_76721962的博客 223

Java快速入门

快速入门Java

m0_52452411的博客 664
上一篇: Java基础快速入门: 方法详解
下一篇: Java基础快速入门: 面向对象核心基础
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值