当前位置: 首页 > wzjs >正文

香港 网站 空间申请表千锋教育的口碑怎么样

香港 网站 空间申请表,千锋教育的口碑怎么样,wordpress企业博客主题,工厂 电商网站建设Java基础系列文章 Java基础(一):发展史、技术体系与JDK环境配置详解 Java基础(二):八种基本数据类型详解 Java基础(三):逻辑运算符详解 Java基础(四):位运算符详解 目录 引言一、基本位运算符1、按位与(&&…

Java基础系列文章

Java基础(一):发展史、技术体系与JDK环境配置详解

Java基础(二):八种基本数据类型详解

Java基础(三):逻辑运算符详解

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

目录

  • 引言
  • 一、基本位运算符
    • 1、按位与(&)
    • 2、按位或(|)
    • 3、按位异或(^)
    • 4、按位取反(~)
  • 二、移位运算符
    • 1、左移(<<)
    • 2、带符号右移(>>)
    • 3、无符号右移(>>>)
  • 三、位运算高级技巧
    • 1、高效乘除
    • 2、奇偶判断
    • 3. 快速取整(取模)
    • 4、位标志管理
  • 四、性能对比实验
  • 五、注意事项
    • 1、左移位位数的有效范围
    • 2、运算符优先级陷阱
  • 结语


引言

  Java位运算符直接操作二进制位(bit),适用于整数类型(byte, short, int, long, char),不兼容浮点数(float, double)。其核心价值在于底层计算优化高效算法实现(如位图、加密算法)。Java共支持7种位运算符

一、基本位运算符

1、按位与(&)

  • 规则:两操作数对应位均为1时结果为1,否则为0
    • 任何位与0相与结果为0(屏蔽效果
    • 任何位与1相与保留原值(透传效果
int a = 60;         // 二进制: 0011 1100
int b = 13;         // 二进制: 0000 1101
int result = a & b; //  结果: 0000 1100 (十进制12)
  • 典型应用:掩码操作(提取特定位
// 提取最低4位
int value = 0b10101100; // 原数值
int mask = 0b00001111;  // 掩码,表示只保留最低4位
int lowerNibble = value & mask; // 结果: 1100 (十进制12)

2、按位或(|)

  • 规则:两操作数对应位至少一个为1时结果为1
int a = 60;         // 	二进制:0011 1100
int b = 13;         // 	二进制:0000 1101
int result = a | b; //   结果:0011 1101 (十进制61)
  • 典型应用:组合位标志
final int READ    = 1;  // 0001 -> 表示读取权限
final int WRITE   = 2;  // 0010 -> 表示写入权限
final int EXECUTE = 4;  // 0100 -> 表示执行权限
final int OTHER   = 8;  // 1000 -> 表示其他权限int permissions = READ | WRITE; // 0011 (3),表示 同时拥有读取和写入权限

3、按位异或(^)

  • 规则:两操作数对应位不同时结果为1,相同时为0
    • 归零律:a ^ a = 0
    • 恒等律:a ^ 0 = a
    • 交换律:a ^ b = b ^ a
    • 结合律:(a ^ b) ^ c = a ^ (b ^ c)
    • 可逆性:a ^ b ^ b = a(可应用于简单加密)
int a = 60;    		// 二进制:0011 1100
int b = 13;         // 二进制:0000 1101
int result = a ^ b; //  结果:0011 0001 (十进制49)
  • 典型应用:交换两个变量(无需临时变量)
int x = 10, y = 20;
x = x ^ y;
// y转换为x值
y = x ^ y;  // y = (x^y)^y = x
// x转换位y值
x = x ^ y;  // x = (x^y)^x = y

4、按位取反(~)

  • 规则:翻转操作数的每一位,0→1, 1→0(包括符号位)
int a = 5;       // 二进制:0000 0101
int result = ~a; // 结果: 1111 1010 (十进制-6,快速计算-a-1=-6)
  • 典型应用1:快速计算补码 - 负数的二进制表示
// 手动计算补码(求负数的二进制表示)
int positive = 42; // 0010 1010
int negative = ~positive + 1; // 1101 0110 (补码形式)System.out.println("+42: " + Integer.toBinaryString(positive)); // 0010 1010
System.out.println("-42: " + Integer.toBinaryString(negative)); // 1111 1111 1111 1111 1111 1111 1101 0110
  • 典型应用2:整数取反操作等价于:~x = -x - 1
正数: 42 = 00000000 00000000 00000000 00101010
取反:~42 = 11111111 11111111 11111111 11010101 = -43负数:   -42 = 11111111 11111111 11111111 11010110
取反:~(-42) = 00000000 00000000 00000000 00101001 = 41

二、移位运算符

1、左移(<<)

  • 规则:将二进制位向左移动指定位数,低位补0
  • 效果:相当于乘以 2 n 2^n 2n(n为移位位数)
  • 3<<4 等价于 3 × 2 4 3 \times 2^4 3×24 => 48
    在这里插入图片描述
  • -3<<4 等价于 − 3 × 2 4 -3 \times 2^4 3×24 => -48
    在这里插入图片描述

2、带符号右移(>>)

  • 规则:将二进制位向右移动高位补符号位(正数补0,负数补1)
  • 效果:相当于除以 2 n 2^n 2n向下取整,相当于右侧溢出的位被丢弃)
  • 69>>4 等价于 69 ÷ 2 4 = 4.3125 69 \div 2^4 = 4.3125 69÷24=4.3125 => 向下取整 => 4
    在这里插入图片描述
  • -69>>4 等价于 − 69 ÷ 2 4 = − 4.3125 -69 \div 2^4 = -4.3125 69÷24=4.3125 => 向下取整 => -5
    在这里插入图片描述

3、无符号右移(>>>)

  • 规则:右移时高位强制补0(负数可能变正数)
  • >>和>>>比较
    • 相同点:都是向下取整,右侧溢出的位被丢弃
    • 不同点:>>>处理结果都是非负数
  • 69>>>4 等价于 69 ÷ 2 4 = 4.3125 69 \div 2^4 = 4.3125 69÷24=4.3125 => 向下取整 => 4
    在这里插入图片描述
  • -69>>>4 结果:268435451
    在这里插入图片描述

三、位运算高级技巧

1、高效乘除

// 乘以2的n次方
int multiplyByPowerOfTwo = num << n; // 除以2的n次方(整数除法)
int divideByPowerOfTwo = num >> n; 

2、奇偶判断

// 使用 &1 判断奇偶
boolean isEven = (num & 1) == 0; 

3. 快速取整(取模)

// 对2的n次方取模(比%运算快5-10倍)
int mod = value & ((1 << n) - 1);// 对256取模
int mod256 = value & 0xFF;  // 十六进制0xFF => 二进制1111 1111  ==> 十进制255// 对32取模
int mod32 = value & 0x1F;	// 十六进制0x1F => 二进制0001 1111  ==> 十进制31

4、位标志管理

// 定义标志位
final int FLAG_A = 1 << 0; // 二进制0001,十进制1
final int FLAG_B = 1 << 1; // 二进制0010,十进制2
final int FLAG_C = 1 << 2; // 二进制0100,十进制4// 设置标志
int flags = FLAG_A | FLAG_C; // 二进制0101,十进制5// 检查标志
boolean hasFlagB = (flags & FLAG_B) != 0; // 0101 & 0010 = 0000// 清除标志
flags &= ~FLAG_A; // 0101 & 1110 = 0100 结果对应FLAG_C,去掉了FLAG_A

四、性能对比实验

  • 奇偶判断,传统方式与位运算方式性能比较(单位:亿次)
// 测试一亿次
int iterations = 100000000;// 传统方式
long start = System.nanoTime();
for (int i = 0; i < iterations; i++) {boolean result = (i % 2) == 0;
}
long modTime = System.nanoTime() - start;// 位运算方式
start = System.nanoTime();
for (int i = 0; i < iterations; i++) {boolean result = (i & 1) == 0;
}
long bitTime = System.nanoTime() - start;System.out.println("取模方式: " + modTime + " ns");
System.out.println("位运算方式: " + bitTime + " ns");
System.out.println("性能提升: " + (modTime - bitTime) * 100 / modTime + "%");

典型测试结果:

取模方式: 2188666 ns
位运算方式: 789709 ns
性能提升: 63%

五、注意事项

1、左移位位数的有效范围

  • 官方规定:实际移位位数:对 int 取模 32,对 long 取模 64
  • 理论int左移32位没有意义,所有位都被挤出去了,结果是 0
int x = 3;
x << 32; // 等价于 x << 0 (结果仍是 3)
x << 33; // 等价于 x << 1 (结果为 6)

2、运算符优先级陷阱

  • 位运算符优先级低于比较运算符(如 ==>)和算术运算符(+-
  • 建议:始终用 () 明确优先级
int a = 5, b = 3, c = 2;
int r1 = a & b + c;   // 等价于 a & (b + c) = 5 & 5 = 5
int r2 = (a & b) + c; // (5 & 3) + 2 = 1 + 2 = 3

结语

  位运算符是Java高效编程的秘密武器。它们不仅提供接近硬件的操作能力,还能在算法优化内存管理网络通信等场景发挥关键作用。虽然现代JVM已高度优化,但在性能敏感领域(如高频交易、游戏引擎、大数据处理),合理使用位运算仍能带来显著提升。

黄金法则:当你在处理二进制数据、标志位集合或需要极致性能时,位运算应是首选工具。但在常规业务逻辑中,优先选择可读性更高的标准操作

http://www.dtcms.com/wzjs/165955.html

相关文章:

  • 婚恋网站模板seo的作用主要有
  • android wap网站长尾词挖掘
  • 南宁制作企业服装搜索引擎优化的报告
  • 意大利室内设计网站国内最新新闻事件
  • 网站本地被劫要怎么做搜索网
  • 首页%3e新闻%3e正文 网站怎么做常见搜索引擎有哪些
  • java接单做任务的网站重庆高端品牌网站建设
  • 网站建设教程讲解杭州seo网站推广
  • 中山市建设局网站窗口电话号码网上店铺的推广方法有哪些
  • 湖南网站建设找拉米拉北京优化seo排名优化
  • 网站建设的swot分析包头网站建设推广
  • 网站建设教程搭建深圳市企业网站seo
  • 网站域名解析失败深圳海外推广
  • 建网站需要身份证吗淘宝关键词查询工具哪个好
  • 表白网站是怎么做的如何让关键词排名靠前
  • html做网站的代码上海seo优化公司
  • 网站建设需要学编程吗5118站长工具箱
  • 深圳微商城网站制作价格seo和sem的区别是什么?
  • 知名网站建设商家百度排行
  • 软件商店下载官网站内优化主要从哪些方面进行
  • 关于做代购网站的纳税知识网上的推广公司
  • 网站建设 技术方案高端网站设计
  • 网站开发转包协议百度知道下载
  • 西安免费做网站公司磁力搜索器 磁力猫在线
  • 设计网站室内百度官方网页
  • 学做网站是什么seo外链建设的方法有
  • 网站建设网站管理百度关键词优化推广
  • 公司网站需要备案电商平台链接怎么弄
  • wordpress app 打包网站如何做优化推广
  • wordpress中对视频排序张家港seo建站