• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

深入学习java位运算的基础知识

java 搞代码 4年前 (2022-01-09) 14次浏览 已收录 0个评论

相信大家和我一样,接触java这门语言的时候就听过java位运算的鼎鼎大名,当然也仅限于听说过。日常开发过程中使用过么?使用位运算的好处是什么?

想要真正理解java位运算,首先要搞清楚,这个“位”代表的含义。

一切的起源:二进制

位:二进制位,简称“位”。是二进制记数系统中表示小于2的整数的符号,一般用1或 0表示,是具有相等概率的两种状态中的一种。二进制位的位数可表示一个机器字的字长,一个二进制位包含的信息量称为一比特(bit)。

举个栗子:
int占4个字节(byte)
1byte = 8bit
换算下来,一个int类型即占32bit
int i = 88; 这里的88为十进制,转换为二进制为:1011000,使用完整的32位表示即为:00000000 00000000 00000000 01011000

上文中的00000000 00000000 00000000
01011000即为十进制88转为二进制的 原码 ,与其相关的定义还有 反码 补码

关于原码、反码和补码

在计算机内,有符号数有三种表示法:原码、反码以及补码。
原码:就是二进制定点表示法,即最高位为符号位,“0”正负“1”,其余位表示数值的大小。
反码:正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1。
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

同样的,我们使用 “88” 举例说明原码、反码以及补码。

“88”的原码:00000000 00000000 00000000 01011000
“88”的反码:00000000 00000000 00000000 01011000
“88”的补码:00000000 00000000 00000000 01011000

对于负数 “-88”,其原码、反码以及补码如下:

“-88”的原码:10000000 00000000 00000000 01011000
“-88”的反码:11111111 11111111 11111111 10100111
“-88”的补码:11111111 11111111 11111111 10101000

为什么要使用补码?

简单来说,就是计算机计算减法时有各种不方便,于是发明了反码,结果发现反码也有缺陷(有两个零存在:“+0”和“-0”),进而发明了补码解决这个问题。

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

有关补码的意义及作用在上面的链接里讨论的非常详尽,我这里就不班门弄斧了,理解就好~

对原码、反码以及补码有一个初步的认知后,我们接下来再看位运算就会清晰很多。

关于位运算

关于位运算,这里运用哲学上三个究极问题试图讲解清楚位运算究竟是何方神圣:什么是位运算?位运算的作用?位运算有什么优势?

什么是位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如本文来源gaodai#ma#com搞@@代~&码网^,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。

下表列出了位运算符的基本运算(A = 8, B = 9)

操作符描述例子
按位与&如果相对应位都是1,则结果为1,否则为0A&B=8,即1000
按位或|如果相对应位都是0,则结果为0,否则为1A|B=9,即1001
按位异或^如果相对应位值相同,则结果为0,否则为1A^B=1,即0001
按位取反~按位取反运算符翻转操作数的每一位,即0变成1,1变成0~A=7,即0111
左移 <<按位左移运算符。左操作数按位左移右操作数指定的位数A << 2 = 32,即1000 00
右移 >>按位右移运算符。左操作数按位右移右操作数指定的位数A >> 2 = 2,即0010

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:深入学习java位运算的基础知识
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址