news 2026/7/15 3:41:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
吃透Java操作符入门:分类差异+进制转换+原反补码 核心前置知识(JavaC对比)

重阳,来,我们把Java 操作符这个“最容易被低估却最常坑人”的基础彻底吃透。

重点覆盖:分类 + 优先级差异 + 位运算核心前置(进制/原码反码补码) + Java vs C 关键对比

目标:看完能手算任意表达式 + 面试/刷题/底层代码不再慌。

1. Java 操作符完整分类(2026 年视角,JDK 21+ 无大变化)

优先级组(从高到低)操作符结合性说明 / 常见坑点
1() [] . new ::左→右最高,括号最强
2expr++ expr–左→右后置自增/自减
3++expr --expr + - ! ~ (type)右→左前置 + 取负 + 逻辑非 + 按位取反 + 强制转换
4* / %左→右乘除取模
5+ -左→右加减(+ 还能字符串拼接)
6<< >> >>>左→右位移(>>> 是 Java 独有)
7< <= > >= instanceof左→右关系 + 类型判断
8== !=左→右相等(对象比较引用,值类型比较值)
9&左→右按位与(也可用于 boolean 逻辑与)
10^左→右按位异或
11左→右
12&&左→右短路逻辑与
13
14? :右→左三元运算符
15= += -= *= /= %= &= ^== <<= >>= >>>=右→左

最容易错的优先级记忆口诀(前6个最重要):

“单目算术位移,乘除加减,位移关系等,位与异或或,逻辑短路,三目赋值”

常见陷阱

  • a & b == c→ 先算b == c,再a & 结果(因为 == 优先级高于 &)
  • -5 >> 1vs-5 >>> 1(后面详解)
  • i = i++ + ++i;(未定义行为,千万别写!)

2. 位运算前置:原码、反码、补码(必懂!)

Java 中所有整数(byte/short/int/long)一律用补码表示

概念正数示例 (以 8 bit 为例)负数示例 (-5, 8 bit)特点 / 记忆法
原码+5 → 00000101-5 → 10000101最高位是符号位(0正1负),其余是绝对值
反码+5 → 00000101-5 → 11111010(符号位不变,其余取反)正数反码=原码,负数符号位不变其余取反
补码+5 → 00000101-5 → 11111011(反码+1)计算机实际存储的就是补码

关键性质(背下来!):

  • 正数的原码 = 反码 = 补码
  • 负数的补码 = 反码 + 1
  • 补码的补码 = 原码(绕一圈回来)
  • ~x(按位取反)其实是-x-1(补码世界里的数学性质)
    • 例:~5 = -6(因为 00000101 → 11111010 → 补码转十进制 = -6)

为什么用补码?

加减法统一(不用区分正负数电路不同)
0 有唯一表示(不像原码有 +0 和 -0)

3. Java 位运算符详解 + 与 C 的核心差异

操作符含义Java 行为(int 示例)C/C++ 对应行为对比关键差异点
&按位与5 & 3 = 1 (0101 & 0011 = 0001)完全相同(纯位运算)
按位或53 = 7
^按位异或5 ^ 3 = 6相同
~按位取反(一元)~5 = -6相同(但 C 中 int 可能是 32/64 bit 实现依赖)无大差异
<<算术左移(带符号,无差异)5 << 2 = 20
-5 << 2 = -20
相同(左移不影响符号位)
>>算术右移(带符号)5 >> 2 = 1
-5 >> 2 = -2(符号扩展)
C 中 >> 对 signed int 是实现定义(多数编译器算术右移)Java 强制算术右移,C 可能逻辑右移(老编译器)
>>>逻辑右移(无符号)5 >>> 2 = 1
-5 >>> 2 = 1073741822
C/C++ 没有 >>>!右移 signed 通常算术,unsigned 才逻辑最大差异!Java 独有,解决负数右移问题

负数 >>> 演示(非常重要!)

inta=-5;// 二进制:1111 1111 1111 1111 1111 1111 1111 1011System.out.println(a>>2);// -2 (1111 1111 ... 1110 符号扩展)System.out.println(a>>>2);// 1073741822 (0011 1111 ... 1110 最高位补0)

C 语言里想实现无符号右移,只能把变量转为 unsigned int 或 unsigned long。

4. 常见位运算经典用法(刷题/面试必备)

用途表达式示例说明
判断奇偶(n & 1) == 1最快判断奇数
取绝对值(不使用 Math)(n ^ (n >> 31)) - (n >> 31)经典位运算取 abs(仅 int/long 有效)
交换两数(不使用临时变量)a ^= b; b ^= a; a ^= b;经典面试题
求 2 的幂次方n & (n-1) == 0 && n > 0判断是否 2 的幂
统计二进制 1 的个数n &= (n-1) 循环直到 n==0Brian Kernighan 算法(最快)
取低 n 位x & ((1 << n) - 1)掩码取低 n 位
设置第 k 位为 1x= (1 << k)
设置第 k 位为 0x &= ~(1 << k)
翻转第 k 位x ^= (1 << k)

5. 快速自测题(建议现在算一算)

  1. -8 >> 3 的结果是?(十进制)
  2. -8 >>> 3 的结果是?(注意 int 32 位)
  3. 表达式: 8 + (-3) & 7 的值?(优先级陷阱)
  4. ~0 的值是多少?
  5. 如何用位运算实现 ×8(不写 *)?

答案稍后可以问我,或者自己 System.out.println() 验证。

重阳,位运算 + 补码 + 优先级这三块吃透后,后面集合、IO、多线程里的位标志、哈希计算、布隆过滤器、权限校验等都会轻松很多。

现在你最想:

  • 看更多经典位运算面试题?
  • 手写几个位运算算法?
  • 继续下一节(比如自动类型转换 & 强制转换的坑)?
  • 还是有具体代码想让我帮你分析为什么结果是这样?

随时说,我们继续冲~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 23:16:17

真的太省时间 8个AI论文工具测评:研究生毕业论文+科研写作全场景推荐

在当前学术研究日益繁重的背景下&#xff0c;研究生群体面临着论文写作、文献检索、格式规范等多重挑战。如何高效地完成科研任务&#xff0c;已成为影响毕业进度与成果质量的关键因素。为此&#xff0c;我们基于2026年的实测数据与真实用户反馈&#xff0c;针对市面上主流的AI…

作者头像 李华
网站建设 2026/7/11 17:57:19

Nginx 高频面试题(含答案)

一、基础概念题&#xff08;必问&#xff09;1. Nginx 是什么&#xff1f;核心应用场景&#xff1f;Nginx 是高性能、轻量级的 HTTP Web 服务器、反向代理服务器、邮件代理服务器。核心场景&#xff1a;静态资源 Web 服务&#xff08;HTML/CSS/JS/ 图片&#xff09;反向代理、负…

作者头像 李华
网站建设 2026/7/13 18:52:48

Java面试必看:XML文档定义与解析方式全面剖析

文章目录 Java面试必看&#xff1a;XML文档定义与解析方式全面剖析一、XML概述&#xff1a;为什么我们需要XML&#xff1f;XML的特点为什么在Java中使用XML&#xff1f; 二、XML文档定义方式1. DTD&#xff08;Document Type Definition&#xff09;DTD的基本结构DTD的优点与缺…

作者头像 李华
网站建设 2026/7/11 18:37:06

超越Adam:深入探索Nesterov动量与自适应学习率优化器及其实现

好的&#xff0c;收到您的需求。我将以“超越Adam&#xff1a;深入探索Nesterov动量与自适应学习率优化器及其实现”为题&#xff0c;撰写一篇深入、新颖且适合开发者阅读的技术文章。 以下是为您生成的完整文章。超越Adam&#xff1a;深入探索Nesterov动量与自适应学习率优化器…

作者头像 李华
网站建设 2026/7/9 22:36:53

Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型?

如果你熟悉 Spark&#xff0c;大概率会有过这样的困惑&#xff1a;Spark都统治大数据领域十年了&#xff0c;算子成熟、生态完善&#xff0c;为什么做特征工程时&#xff0c;大家还要费劲巴拉去学Ray Data、Daft这些新框架&#xff1f;更不用说&#xff0c;这些新框架的API&…

作者头像 李华