吃透Java操作符入门:分类差异+进制转换+原反补码 核心前置知识(Java&C对比)

🏠个人主页:黎雁

🎬作者简介:C/C++/JAVA后端开发学习者

❄️个人专栏:C语言数据结构(C语言)EasyXJAVA游戏规划程序人生

✨ 从来绝巘须孤往,万里同尘即玉京

文章目录

  • [吃透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分钟

适用人群及阅读重点

  1. ✅ Java零基础入门者:重点掌握操作符分类、进制转换规则、原反补码核心逻辑,建立知识框架。
  2. ✅ 有C语言基础转Java:聚焦「Java & C语言核心区别」板块,熟记Java新增特性与语法约束。
  3. ✅ 备考/初学开发者:牢记原反补码存储规则、进制转换实用技巧,应对笔试基础考点。
  4. ✅ 进阶学习者:吃透补码存储的底层原因,为深入理解位运算、内存管理打下基础。

一、知识回顾 📚

在Java入门系列的前几篇内容中,我们系统学习了Java的基础语法、变量与数据类型的核心知识点。掌握了变量的定义、赋值与作用域,以及不同数据类型的取值范围和转换规则。这些内容是我们学习操作符的重要基础,因为操作符的作用对象正是常量与变量,只有明确数据类型的特性,才能正确使用操作符进行运算。


二、前言 ✨

各位CSDN的小伙伴们~今天我们正式开启Java操作符的系统学习之旅!操作符是Java代码的「运算基石」,无论是简单的数值计算、逻辑判断,还是复杂的位运算、赋值操作,都离不开操作符的参与。

Java的操作符体系与C语言有很高的相似性,但Java在C语言的基础上做了语法优化、特性新增与严谨性约束,还剔除了指针相关的语法。很多新手在学习过程中踩坑,往往是因为混淆了两者的差异。本次系列内容将分四篇展开,本篇作为第一篇,聚焦操作符的核心前置知识,为后续深入学习铺平道路~


三、Java操作符的全量分类 + Java & C语言 核心区别【重中之重✅】

3.1 操作符的定义

Java中的操作符(也叫运算符),是对常量或变量进行运算和数据处理的特殊符号。操作符的操作对象称为「操作数」,根据操作数的数量,可分为单目操作符(1个操作数)、双目操作符(2个操作数)和三目操作符(3个操作数)。

3.2 Java操作符完整分类(全12类)

Java的操作符按照功能可分为以下12大类,覆盖所有运算场景,方便后续学习时快速定位:

  1. 算术操作符:+、-、*、/、%
  2. 移位操作符:<<、>>、>>>
  3. 位操作符:&、|、^、~
  4. 赋值操作符:=、+=、-=、*=、/=、%=
  5. 单目操作符:!、++、--、+、-、~、(类型)
  6. 关系操作符:>、>=、<、<=、==、!=
  7. 逻辑操作符:&&、||、!、&、|
  8. 条件操作符(三目):?:
  9. 下标引用操作符:[]
  10. 函数调用操作符:()
  11. 成员访问操作符:.
  12. 空合并操作符(Java专属):??

3.3 Java & C语言 操作符 12项核心差异【必考重点⭐】

这是本篇的核心考点,也是新手最容易混淆的地方,逐条对应,清晰易记,所有差异将贯穿后续系列讲解:

  1. ✅ 算术操作符:Java的%支持浮点型运算(如40.7%2.0=0.7);C语言仅支持整数。
  2. ✅ 移位操作符:Java新增>>>(逻辑右移);C语言无此操作符,且>>类型取决于编译器。
  3. ✅ 位操作符:Java无指针,仅对值类型整数运算;C语言可对指针类型做位运算。
  4. ✅ 赋值操作符:Java新增>>>=;且强类型要求强制转换,C语言自动隐式转换。
  5. ✅ 单目操作符:Java无C语言的&(取地址)、*(解引用)、sizeof
  6. ✅ 关系操作符:Java结果为boolean类型;C语言返回整数(0为假,非0为真)。
  7. ✅ 逻辑操作符:Java的&&、||仅对boolean生效;C语言对整数生效。
  8. ✅ 条件操作符:两者语法一致,无差异。
  9. ✅ 逗号相关:Java无逗号表达式,仅作参数分隔符;C语言支持逗号表达式。
  10. ✅ 下标引用[]:Java运行时检查下标越界;C语言不检查,易导致内存错误。
  11. ✅ 函数调用():两者语法一致,无差异。
  12. ✅ 成员访问: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的表示形式,完美解决此问题。


✨ 知识回顾(核心考点快速记忆)

  1. Java操作符分12类,与C语言的12项核心差异是重点,需熟记Java新增特性与语法约束。
  2. 进制转换核心:二进制转十进制按权重求和,十进制转二进制除2取余,二进制与八/十六进制分组转换。
  3. 整数在内存中存储补码,正数三码合一,负数需经原码→反码→补码的转换,移位和位运算均基于补码。
  4. 补码存储的核心原因:统一加减法运算,简化硬件设计;解决正负0的歧义问题。

✍️ 写在最后

本篇作为Java操作符系列的第一篇,聚焦核心前置知识,从操作符的分类与跨语言差异,到进制转换规则,再到原反补码的底层逻辑,层层递进,为后续学习打下坚实基础。这些内容看似基础,却是理解所有运算的关键,只有吃透这些前置知识,才能真正掌握操作符的使用。

下一篇我们将进入实战环节,详细讲解Java的算术操作符和移位操作符,包括它们的语法规则、核心特性、完整代码案例,以及与C语言的差异对比。内容干货满满,敬请期待~

感谢各位的阅读,如果觉得本篇内容对你有帮助,欢迎点赞+收藏+关注,你的支持是我持续更新的动力✨,咱们下篇见!

相关推荐
天天摸鱼的java工程师2 小时前
volatile 关键字底层原理:为什么它不能保证原子性?
java·后端
钟良堂2 小时前
Java完整实现 MinIO 对象存储搭建+封装全套公共方法+断点上传功能
java·minio·断点上传
满栀5852 小时前
三级联动下拉框
开发语言·前端·jquery
名字不好奇2 小时前
C++虚函数表失效???
java·开发语言·c++
u0104058362 小时前
Java中的服务监控:Prometheus与Grafana的集成
java·grafana·prometheus
行稳方能走远2 小时前
Android java 学习笔记2
android·java
e***98572 小时前
MATLAB高效算法实战:从基础到进阶优化
开发语言·算法·matlab
yaoxin5211232 小时前
286. Java Stream API - 使用Stream.iterate(...)创建流
java·开发语言