最近有涉及的网络编程方面的工作,对java的位操作算是入门了!
/**
* The default byte order of bytes: BIG_ENDIAN
*
* @param bytes
* @return
*/
public static final int getUnsignedInt(byte... bytes) {
switch (bytes.length) {
case 1:
return 0xFF & bytes[0];
case 2:
return ((0xFF & bytes[0]) << 8) | (0xFF & bytes[1]);
case 3:
return ((0xFF & bytes[0]) << 16) | ((0xFF & bytes[1]) << 8) | (0xFF & bytes[2]);
case 4: {
int i = ((0xFF & bytes[0]) << 24) | ((0xFF & bytes[1]) << 16) | ((0xFF & bytes[2]) << 8)
| (0xFF & bytes[3]);
if (i > 0)
return i;
}
}
throw new RuntimeException("over the max value");
}
以上代码,隐藏了如下知识点:
1. java中,使用补码的形式来表示二进制的:
a). 正数的原码、反码和补码是一样的;
b). 负数的补码有如下规则:原码——>反码——>补码
原码:负数的原码为1|x|
反码:负数的反码,符号位不变,数值取反
补码:负数的反码加1(会影响符号位)
2. java中进行算术和位运算时
a). 整数存储时,使用的是big-endian字节序列: 高字节在前,低字节在后
b). 类型会自动按精度从“低”到“高”进行转换,转换的顺序如下:
byte——>short——>int——>long——>float——>double
c). 位运算后,byte,short都转换了int类型
// 值为2,这里赋值的就是用的补码形式
int i2 =0x02;
// 值为-2,这里赋值的就是用的补码形式
int i_2 = 0xFFFFFFFE;
byte b1 = (byte) 0x01;
byte b_1 = (byte) 0xFF;
byte b_2 = (byte) 0xFe;
System.out.println("b_1: " + b_1);
System.out.println("0x0FF & b_1: " + (0x0FF & b_1));
// -2的补码进行左移后,得到是-256。由于负数补码与原码不一样,因此左移操作后,高位也会发生了变化,再转换成原码计算出的数值就不是预期的 。
System.out.println("b_1 << 8: " + (b_1 << 8));
// 终于明白0xFF&的作用了:使用0xFF&是为了确保负整数的高位不变,即为0x000000FF&
System.out.println("(0xFF & b_1) << 8: " + ((0xFF & b_1) << 8));
// 但如果操作是正数,则不用0xFF来保证高位不变,是因为正数的补码与原码是一样的,左移操作后,除了低位左移了指定位数外,补码其它高位并没有变化(即都是0)
System.out.println("b1 << 8 : " + (b1 << 8));
// 把-1这个数值强制转换成了int型
int i_1 = b_1;
System.out.println(i_1 << 8);
分享到:
相关推荐
根据提供的文件信息,本文将围绕Java 7这一版本的基础知识、特性以及如何通过提供的链接获取《Java 7经典入门》这本书进行详细介绍。 ### Java 7简介 Java 7是Java平台标准版(Java SE)的一个重要版本,由Oracle...
### Java设计模式入门详解 #### 一、设计模式概述 设计模式是软件工程领域中一种通用的解决方案,它描述了在特定情况下解决常见问题的方法。《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements ...
《Java开发从入门到精通》是由扶松柏和陈小玉两位专家编著的书籍,旨在帮助初学者和有一定基础的开发者系统学习和掌握Java编程技术。2016年9月出版的这本书包含了丰富的教学内容,配合随书光盘,提供了一套完整的...
本资源包含"JAVA WEB从入门到精通"这本书随书附带的第2到第10章的源代码,这些章节通常涵盖了Web开发的基础到进阶内容。 1. **基础概念**:Java Web开发首先涉及Servlet和JSP(JavaServer Pages),它们是构建动态...
本资源"Java从入门到项目实战【配套资源】自测题目.rar"为Java初学者和开发者提供了一套完整的自测题目,旨在巩固基础,提升实践能力,并为面试准备提供便利。以下是基于该资源涵盖的知识点的详细讲解: 1. **基础...
书中也介绍了如何利用Java解决实际问题,包括但不限于文件操作、网络编程、多线程处理以及数据库连接等高级应用。 通过阅读此书,初学者可以逐步建立起对Java语言的认识,并通过大量的编程案例来加深理解。每个章节...
Java支持左移、右移和无符号右移操作,这些操作可以快速地对二进制位进行移动,从而实现高效的数值处理。例如,左移一位相当于乘以2,右移一位相当于除以2。 在循环算法方面,Java提供了多种循环结构,如`for`、`...
### Java基础入门教程+Android必备基础 #### 一、Java语言简介 Java 是一种广泛使用的高级编程语言,最初由 Sun Microsystems 开发并于 1995 年发布。它的设计理念是为了适应互联网的需求,具备跨平台运行的能力。...
### Java基础入门知识点详解 #### 一、Java基础概念 1. **Java版本体系:** - **JavaEE (Java Platform, Enterprise Edition)**: 主要针对企业级应用开发,包括Web应用、服务端应用等。提供了更多的API和服务,如...
"韩顺平java从入门到精通的教学PPT"是一个专门为初学者和有志于深入理解Java编程的开发者设计的教育资源。韩顺平是一位知名的IT教育专家,他在Java教学方面有着丰富的经验,他的教程往往深入浅出,易于理解,深受...
此外,还有关于位运算、设计模式、数组和网络编程的文档,这些都是Java SE编程的重要组成部分。 总的来说,这个Java SE编程入门教程全面覆盖了初学者需要了解的关键概念和技术,提供了丰富的实例和练习,旨在帮助...
《Java语言程序设计(Java7)入门与提高篇》是一本专为初学者和有一定基础的程序员设计的书籍,旨在帮助读者深入理解Java编程语言,并通过实际操作提升编程技能。这本书涵盖的内容广泛,从基础语法到高级特性,全...
- 运算符(算术、比较、逻辑、位操作等) 3. **第三讲_语言基础.ppt**: - 控制结构(顺序、选择和循环) - 条件语句(if, if-else, switch) - 循环(for, while, do-while) 4. **第四讲_流程控制语句.ppt**...
4 软 件 最 终 产 品 :用 Java 语 言 开 发 的 软 件 可 以 具 有 可视化 、 可 听 化 、 可 操作 化 的 效 果 ,这 要 比 电 视 、 电 影 的 效果 更 为 理 想 ,因 为 它 可 以做 到 "即 时 、 交 互、 动 画 与 ...
5. **运算符**:包括算术、比较、逻辑、位操作等,这些是控制程序流程的基础。 6. **流程控制**:如条件语句(If, If-Else, Switch)和循环结构(For, While, Do-While),用于根据条件执行特定代码或重复执行某段代码...
JAVA具有简单、多变、面向对象、不依赖操作系统的特点,因此它具有很好的移植性和安全性。在JAVA的学习过程中,搭建Java开发环境是基础,其中包括下载、安装和配置JDK。 JDK,即Java Development Kit,是Java的系统...
本“JAVA语言入门手册”是一份全面的教程,旨在帮助初学者理解并掌握Java编程的基础。CHM(Compiled Help Manual)文件格式是一种微软开发的帮助文档格式,通常包含索引、搜索功能和丰富的内嵌链接,便于读者快速...