没有合适的资源?快使用搜索试试~ 我知道了~
首页深入理解Java位运算:基础与负数表示
深入理解Java位运算:基础与负数表示
2星 需积分: 9 7 下载量 154 浏览量
更新于2024-09-21
收藏 235KB PDF 举报
"Java位运算.pdf"文档深入讲解了Java中的位运算,这是一种针对整数类型(如long、int、short、char和byte)进行底层位级操作的方式。位运算符包括按位非(NOT)、按位与(AND)、按位或(OR)、按位异或(XOR)、右移(>> 和 >>>)、左移(<<)以及相应的赋值运算符(&=, |=, ^=, >>=, <<=)。这些运算符允许开发者精确地控制数据的二进制表示,这对于理解和处理位级逻辑、压缩数据、实现高效算法等方面非常有用。 理解位运算的关键在于理解Java中整数的存储方式和负数的表示。Java使用2的补码(two's complement)编码,这是一种广泛使用的负数表示方法。对于正数,其二进制表示保持不变;对于负数,通过取其对应正数的二进制表示取反再加1来确定。例如,-42的二进制表示为11010110,它是42的二进制10101010取反并加1的结果。 在进行位运算时,理解零的交叉(即正零和负零的区别)很重要。在Java中,0的补码表示为11111111,代表负零,但这在数学上不被接受。为避免混淆,使用2的补码系统时会确保负零不是有效的数值,只用于特定的特殊用途。 掌握这些位运算符及其原理有助于开发人员在处理大数据集、加密算法、图像处理等场景中提高代码效率和性能。在实际编程中,正确使用位运算可以简化复杂问题的解决,尤其是在处理位级别的细节时,如位掩码、位操作的优化等。学习和熟练运用Java位运算,是提升编程技能和理解计算机底层工作原理的重要一步。"
资源详情
资源推荐
Java 定义的位运算(bitwise operators )直接对整数类型的位进行操作,这些整数类型包括 long,int,
short,char,and byte 。表 4-2 列出了位运算:
表 4.2 位运算符及其结果
运算符 结果
~ 按位非(NOT)(一元运算)
& 按位与(AND)
| 按位或(OR)
^ 按位异或(XOR)
>> 右移
>>> 右移,左边空出的位以 0 填充
运算符 结果
<< 左移
&= 按位与赋值
|= 按位或赋值
^= 按位异或赋值
>>= 右移赋值
>>>= 右移赋值,左边空出的位以 0 填充
<<= 左移赋值
续表
既然位运算符在整数范围内对位操作,因此理解这样的操作会对一个值产生什么效果是重要的。具体地说,
知道 Java 是如何存储整数值并且如何表示负数的是有用的。因此,在继续讨论之前,让我们简短概述一
下这两个话题。
所有的整数类型以二进制数字位的变化及其宽度来表示。例如,byte 型值 42 的二进制代码是00101010 ,
其中每个位置在此代表 2 的次方,在最右边的位以 20 开始。向左下一个位置将是 21,或 2,依次向左是
22,或 4,然后是 8,16,32 等等,依此类推。因此 42 在其位置 1,3,5 的值为 1(从右边以 0 开始
数);这样 42 是 21+23+25 的和,也即是 2+8+32 。
所有的整数类型(除了 char 类型之外)都是有符号的整数。这意味着他们既能表示正数,又能表示负数。
Java 使用大家知道的 2 的补码(two’s complement )这种编码来表示负数,也就是通过将与其对应的
正数的二进制代码取反(即将 1 变成 0,将 0 变成 1),然后对其结果加 1。例如,-42 就是通过将 42 的
二进制代码的各个位取反,即对 00101010 取反得到 11010101 ,然后再加 1,得到 11010110 ,即
-42 。要对一个负数解码,首先对其所有的位取反,然后加 1。例如-42,或 11010110 取反后为
00101001 ,或 41,然后加 1,这样就得到了 42。
如果考虑到零的交叉(zero crossing )问题,你就容易理解 Java (以及其他绝大多数语言)这样用 2
的补码的原因。假定 byte 类型的值零用 00000000 代表。它的补码是仅仅将它的每一位取反,即生成
11111111 ,它代表负零。但问题是负零在整数数学中是无效的。为了解决负零的问题,在使用 2 的补码
代表负数的值时,对其值加 1。即负零 11111111 加 1 后为 100000000 。但这样使 1 位太靠左而不适
合返回到 byte 类型的值,因此人们规定,-0 和 0 的表示方法一样,-1 的解码为 11111111 。尽管我们
在这个例子使用了 byte 类型的值,但同样的基本的原则也适用于所有 Java 的整数类型。
因为 Java 使用 2 的补码来存储负数,并且因为 Java 中的所有整数都是有符号的,这样应用位运算符可
以容易地达到意想不到的结果。例如,不管你如何打算,Java 用高位来代表负数。为避免这个讨厌的意外,
请记住不管高位的顺序如何,它决定一个整数的符号。
4.2.1 位逻辑运算符
位逻辑运算符有“与”(AND)、 “或”(OR)、 “异或(XOR )”、“非(NOT)”,分别用“&”、“|”、“^”、“~”
下载后可阅读完整内容,剩余6页未读,立即下载
test19810124
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ExtJS 2.0 入门教程与开发指南
- 基于TMS320F2812的能量回馈调速系统设计
- SIP协议详解:RFC3261与即时消息RFC3428
- DM642与CMOS图像传感器接口设计与实现
- Windows Embedded CE6.0安装与开发环境搭建指南
- Eclipse插件开发入门与实践指南
- IEEE 802.16-2004标准详解:固定无线宽带WiMax技术
- AIX平台上的数据库性能优化实战
- ESXi 4.1全面配置教程:从网络到安全与实用工具详解
- VMware ESXi Installable与vCenter Server 4.1 安装步骤详解
- TI MSP430超低功耗单片机选型与应用指南
- DOS环境下的DEBUG调试工具详细指南
- VMware vCenter Converter 4.2 安装与管理实战指南
- HP QTP与QC结合构建业务组件自动化测试框架
- JsEclipse安装配置全攻略
- Daubechies小波构造及MATLAB实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功