
🏠个人主页:黎雁
🎬作者简介:C/C++/JAVA后端开发学习者
❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、游戏、规划、程序人生
✨ 从来绝巘须孤往,万里同尘即玉京

文章目录
- [吃透Java操作符入门:分类差异+进制转换+原反补码 核心前置知识✨(Java&C对比)](#吃透Java操作符入门:分类差异+进制转换+原反补码 核心前置知识✨(Java&C对比))
-
- 文章摘要(246字)
- [一、知识回顾 📚](#一、知识回顾 📚)
- [二、前言 ✨](#二、前言 ✨)
- [三、Java操作符的全量分类 + Java & C语言 核心区别【重中之重✅】](#三、Java操作符的全量分类 + Java & C语言 核心区别【重中之重✅】)
-
- [3.1 操作符的定义](#3.1 操作符的定义)
- [3.2 Java操作符完整分类(全12类)](#3.2 Java操作符完整分类(全12类))
- [3.3 Java & C语言 操作符 12项核心差异【必考重点⭐】](#3.3 Java & C语言 操作符 12项核心差异【必考重点⭐】)
- [四、前置必学:进制转换 🔢 打通人与计算机的「语言壁垒」](#四、前置必学:进制转换 🔢 打通人与计算机的「语言壁垒」)
-
- [4.1 核心进制说明](#4.1 核心进制说明)
- [4.2 二进制 ↔ 十进制 核心转换(最常用)](#4.2 二进制 ↔ 十进制 核心转换(最常用))
-
- [✔ 二进制转十进制:按权重求和](#✔ 二进制转十进制:按权重求和)
- [✔ 十进制转二进制:两种实用方法](#✔ 十进制转二进制:两种实用方法)
- [4.3 二进制 ↔ 八进制/十六进制 分组简化转换](#4.3 二进制 ↔ 八进制/十六进制 分组简化转换)
-
- [✔ 二进制 → 八进制/十六进制](#✔ 二进制 → 八进制/十六进制)
- [✔ 八进制/十六进制 → 二进制](#✔ 八进制/十六进制 → 二进制)
- [4.4 实用技巧:Java中进制的打印](#4.4 实用技巧:Java中进制的打印)
- [五、前置必学:原码、反码、补码 🧠 整数在内存中的存储本质](#五、前置必学:原码、反码、补码 🧠 整数在内存中的存储本质)
-
- [5.1 核心前提:符号位与整型位数](#5.1 核心前提:符号位与整型位数)
- [5.2 原码、反码、补码 转换规则](#5.2 原码、反码、补码 转换规则)
- [5.3 经典案例演示(必看)](#5.3 经典案例演示(必看))
- [5.4 为什么Java要使用补码存储?【吃透底层】](#5.4 为什么Java要使用补码存储?【吃透底层】)
-
- [✔ 原因1:统一加减法运算,简化硬件设计](#✔ 原因1:统一加减法运算,简化硬件设计)
- [✔ 原因2:解决「正负0」的歧义问题](#✔ 原因2:解决「正负0」的歧义问题)
- [✨ 知识回顾(核心考点快速记忆)](#✨ 知识回顾(核心考点快速记忆))
- [✍️ 写在最后](#✍️ 写在最后)
吃透Java操作符入门:分类差异+进制转换+原反补码 核心前置知识✨(Java&C对比)
文章摘要(246字)
本文为Java操作符系列第一篇,聚焦入门必备的核心前置知识,系统梳理Java操作符的全量分类,对比Java与C语言的12项核心语法差异,详解进制转换的完整规则,以及整数在内存中存储的原码、反码、补码底层逻辑。内容既保留C语言同源知识点辅助理解,又突出Java的专属特性与语法约束,搭配清晰案例与实用技巧。零基础友好,吃透本章节,可打通Java运算底层逻辑,为后续操作符学习筑牢基础,规避跨语言学习误区。
阅读时长:约15分钟
适用人群及阅读重点
- ✅ Java零基础入门者:重点掌握操作符分类、进制转换规则、原反补码核心逻辑,建立知识框架。
- ✅ 有C语言基础转Java:聚焦「Java & C语言核心区别」板块,熟记Java新增特性与语法约束。
- ✅ 备考/初学开发者:牢记原反补码存储规则、进制转换实用技巧,应对笔试基础考点。
- ✅ 进阶学习者:吃透补码存储的底层原因,为深入理解位运算、内存管理打下基础。
一、知识回顾 📚
在Java入门系列的前几篇内容中,我们系统学习了Java的基础语法、变量与数据类型的核心知识点。掌握了变量的定义、赋值与作用域,以及不同数据类型的取值范围和转换规则。这些内容是我们学习操作符的重要基础,因为操作符的作用对象正是常量与变量,只有明确数据类型的特性,才能正确使用操作符进行运算。
二、前言 ✨
各位CSDN的小伙伴们~今天我们正式开启Java操作符的系统学习之旅!操作符是Java代码的「运算基石」,无论是简单的数值计算、逻辑判断,还是复杂的位运算、赋值操作,都离不开操作符的参与。
Java的操作符体系与C语言有很高的相似性,但Java在C语言的基础上做了语法优化、特性新增与严谨性约束,还剔除了指针相关的语法。很多新手在学习过程中踩坑,往往是因为混淆了两者的差异。本次系列内容将分四篇展开,本篇作为第一篇,聚焦操作符的核心前置知识,为后续深入学习铺平道路~
三、Java操作符的全量分类 + Java & C语言 核心区别【重中之重✅】
3.1 操作符的定义
Java中的操作符(也叫运算符),是对常量或变量进行运算和数据处理的特殊符号。操作符的操作对象称为「操作数」,根据操作数的数量,可分为单目操作符(1个操作数)、双目操作符(2个操作数)和三目操作符(3个操作数)。
3.2 Java操作符完整分类(全12类)
Java的操作符按照功能可分为以下12大类,覆盖所有运算场景,方便后续学习时快速定位:
- 算术操作符:
+、-、*、/、% - 移位操作符:
<<、>>、>>> - 位操作符:
&、|、^、~ - 赋值操作符:
=、+=、-=、*=、/=、%=等 - 单目操作符:
!、++、--、+、-、~、(类型) - 关系操作符:
>、>=、<、<=、==、!= - 逻辑操作符:
&&、||、!、&、| - 条件操作符(三目):
?: - 下标引用操作符:
[] - 函数调用操作符:
() - 成员访问操作符:
. - 空合并操作符(Java专属):
??
3.3 Java & C语言 操作符 12项核心差异【必考重点⭐】
这是本篇的核心考点,也是新手最容易混淆的地方,逐条对应,清晰易记,所有差异将贯穿后续系列讲解:
- ✅ 算术操作符:Java的
%支持浮点型运算(如40.7%2.0=0.7);C语言仅支持整数。 - ✅ 移位操作符:Java新增
>>>(逻辑右移);C语言无此操作符,且>>类型取决于编译器。 - ✅ 位操作符:Java无指针,仅对值类型整数运算;C语言可对指针类型做位运算。
- ✅ 赋值操作符:Java新增
>>>=;且强类型要求强制转换,C语言自动隐式转换。 - ✅ 单目操作符:Java无C语言的
&(取地址)、*(解引用)、sizeof。 - ✅ 关系操作符:Java结果为
boolean类型;C语言返回整数(0为假,非0为真)。 - ✅ 逻辑操作符:Java的
&&、||仅对boolean生效;C语言对整数生效。 - ✅ 条件操作符:两者语法一致,无差异。
- ✅ 逗号相关:Java无逗号表达式,仅作参数分隔符;C语言支持逗号表达式。
- ✅ 下标引用
[]:Java运行时检查下标越界;C语言不检查,易导致内存错误。 - ✅ 函数调用
():两者语法一致,无差异。 - ✅ 成员访问:Java只有
.;C语言有.和->(用于结构体指针)。
四、前置必学:进制转换 🔢 打通人与计算机的「语言壁垒」
想要吃透移位、位操作符,进制转换是必须掌握的前置知识!计算机底层仅识别二进制(0和1),人类习惯使用十进制,开发中还会用到八进制和十六进制。四种进制的转换规则,是理解所有位运算的基础。
4.1 核心进制说明
- 十进制:日常使用,无前置标识,由0-9组成(如
10、25) - 二进制:计算机存储,Java中以
0b开头,由0和1组成(如0b1010) - 八进制:简化二进制,Java中以
0开头,由0-7组成(如015) - 十六进制:最常用简化进制,Java中以
0x/0X开头,由0-9、A-F组成(如0x6B)
4.2 二进制 ↔ 十进制 核心转换(最常用)
✔ 二进制转十进制:按权重求和
规则:二进制从右往左,第n位(从0开始计数)的权重为2ⁿ,每一位数值 × 对应权重,求和即为十进制。
示例:二进制0b1101 → 十进制
1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8 + 4 + 0 + 1 = 13
✔ 十进制转二进制:两种实用方法
▷ 方法一:除2取余法(适合大数)✅
规则:十进制数反复除以2,记录每次余数,直到商为0,余数倒序排列 即为二进制。
示例:十进制125 → 二进制
125÷2=62余1 → 62÷2=31余0 → 31÷2=15余1 → 15÷2=7余1 → 7÷2=3余1 → 3÷2=1余1 → 1÷2=0余1
余数倒排:1111101 → 十进制125 = 二进制0b1111101
▷ 方法二:幂拆解法(适合小数)✅
规则:将十进制拆分为若干个2ⁿ的和,有对应幂的位置记1,无则记0,组合为二进制。
示例:十进制25 → 二进制
25 = 16(2⁴) + 8(2³) + 1(2⁰) → 二进制0b11001
4.3 二进制 ↔ 八进制/十六进制 分组简化转换
核心是位数对应关系,无需复杂计算,记牢即可快速转换:
- 1位八进制 ↔ 3位二进制
- 1位十六进制 ↔ 4位二进制
✔ 二进制 → 八进制/十六进制
规则:从右往左分组,不足位数左侧补0,每组对应转换为目标进制。
示例:二进制0b01101011
→ 转八进制:分组001 101 011 → 对应1 5 3 → 八进制0153
→ 转十六进制:分组0110 1011 → 对应6 B → 十六进制0x6B
✔ 八进制/十六进制 → 二进制
规则:反向操作,每1位目标进制数,拆分为对应位数的二进制。
示例:八进制0153 → 二进制001101011;十六进制0x6B → 二进制01101011
4.4 实用技巧:Java中进制的打印
开发中常用的进制打印方法,通过Integer类的工具方法实现:
java
public class RadixDemo {
public static void main(String[] args) {
int num = 13;
System.out.println("十进制:" + num); // 13
System.out.println("二进制:" + Integer.toBinaryString(num)); // 1101
System.out.println("八进制:" + Integer.toOctalString(num)); // 15
System.out.println("十六进制:" + Integer.toHexString(num)); // d
}
}
五、前置必学:原码、反码、补码 🧠 整数在内存中的存储本质
这是所有位运算、移位运算的底层核心!99%的新手对位运算的疑惑,都源于不懂原反补码。核心结论必须牢记:
✅ Java中,所有整型数据(byte/short/int/long)在内存中存储的都是「补码」
✅ 此规则仅适用于整数,浮点型(float/double)有专属存储规则
✅ 移位、位操作符,全部是对数值的二进制补码进行运算
5.1 核心前提:符号位与整型位数
- 符号位:有符号整数的二进制最高位 为符号位,
0表示正数,1表示负数;无符号整数无符号位,所有位都是数值位。 - 位数规则:Java中
int占4字节=32位,byte占1字节=8位,short占2字节=16位,long占8字节=64位。
5.2 原码、反码、补码 转换规则
三者的转换规则分「正数」和「负数」,正数的三码合一,负数的三码需要计算,记牢规律即可:
| 数据类型 | 原码(直观表示) | 反码(过渡形式) | 补码(内存存储) |
|---|---|---|---|
| 有符号正数 | 符号位0 + 数值二进制 | 与原码完全相同 | 与原码完全相同 |
| 有符号负数 | 符号位1 + 绝对值二进制 | 符号位不变,数值位0↔1 | 反码 + 1(逢2进1) |
| 无符号整型 | 无符号位,纯数值二进制 | 与原码相同 | 与原码相同 |
5.3 经典案例演示(必看)
▷ 案例1:有符号int a = 10(正数,三码合一)
int是32位,二进制补码:00000000 00000000 00000000 00001010
原码 = 反码 = 补码,完全一致。
▷ 案例2:有符号int b = -10(负数,原→反→补)
✅ 原码:10000000 00000000 00000000 00001010(符号位1,数值位是10的二进制)
✅ 反码:11111111 11111111 11111111 11110101(符号位不变,数值位取反)
✅ 补码:11111111 11111111 11111111 11110110(反码 + 1)
5.4 为什么Java要使用补码存储?【吃透底层】
这是面试高频问题,核心原因有两个,既简化硬件设计,又解决逻辑歧义:
✔ 原因1:统一加减法运算,简化硬件设计
计算机硬件中只有「加法器」,没有专门的减法器。补码可将减法运算转换为加法运算 (a - b = a + (-b)),无需额外设计减法硬件,降低电路复杂度。
示例:计算1 - 1 = 1 + (-1)
- 1的补码:
00000000 ... 00000001 - -1的补码:
11111111 ... 11111111 - 相加结果:
100000000 ... 00000000(33位,最高位溢出舍弃) - 最终结果:
00000000 ... 00000000→ 十进制0,计算正确。
✔ 原因2:解决「正负0」的歧义问题
如果用原码存储,会出现+0(0000...0000)和-0(1000...0000)两种表示,逻辑上矛盾。而补码中只有一种0的表示形式,完美解决此问题。
✨ 知识回顾(核心考点快速记忆)
- Java操作符分12类,与C语言的12项核心差异是重点,需熟记Java新增特性与语法约束。
- 进制转换核心:二进制转十进制按权重求和,十进制转二进制除2取余,二进制与八/十六进制分组转换。
- 整数在内存中存储补码,正数三码合一,负数需经原码→反码→补码的转换,移位和位运算均基于补码。
- 补码存储的核心原因:统一加减法运算,简化硬件设计;解决正负0的歧义问题。
✍️ 写在最后
本篇作为Java操作符系列的第一篇,聚焦核心前置知识,从操作符的分类与跨语言差异,到进制转换规则,再到原反补码的底层逻辑,层层递进,为后续学习打下坚实基础。这些内容看似基础,却是理解所有运算的关键,只有吃透这些前置知识,才能真正掌握操作符的使用。
下一篇我们将进入实战环节,详细讲解Java的算术操作符和移位操作符,包括它们的语法规则、核心特性、完整代码案例,以及与C语言的差异对比。内容干货满满,敬请期待~
感谢各位的阅读,如果觉得本篇内容对你有帮助,欢迎点赞+收藏+关注,你的支持是我持续更新的动力✨,咱们下篇见!