java

Java位运算及心得

Java位运算及心得

学完被篇, 你将会位的基础概念与语法

  • 与、或、非、位移

开始本篇之前,我们先思考一个问题:

byte a = 33;
byte b = -33;

若我们输出a、b的二进制字符串是多少?

答案是这样的 :

a ->// 00100001
b ->// 10100001
默认例子中的值都按byte来算,占8位,减少大家的记忆负担。

因为byte占8位,所以有效数据存储7位,最高位为符号位。int值则是31位存储数据…

  • 0 代表正数
  • 1 代表负数二进制的计算规则是:

二进制的计算规则是:逢2进1

这个很好理解,因为表示的数字就是:0、1两个数字,想要表示更大的值就只能往前递增进步。


运算法则 :

byte a = 88; //补码01011000
byte b = -88;//补码10101000
int n = 1;
为何计算补码 : 在计算机系统中,数值一律用补码来表示和存储

正数补码不变, 负数快速补码 : 原码补码快速互转

按位与 a & b
a、b对应位都为1时,c对应位为1;反之为0。

按位与 a | b
a、b对应位只要有一个为1,c对应位就为1;反之为0。

按位异或 a^b
a、b对应位只要不同,则c对应位就为1;反之为0。

按位取反(非)
c对应位与输入参数a完全相反;a对应位为1,则c对应位就为0;a对应位为0,则c对应位就为1。

左移
a对应位全部左移动n位得到c;a最左边的n个位全部丢弃(红色框),c最右边n个位补充0(绿色框)。

个人心得 : 如果是正数, 直接 乘以 2 的 n 次方 ; 如果是负数, 老老实实算吧

右移(带符号)
输入1个参数b;n = 1

这里将参数换为b是因为b为负数,第一个位为1

b对应位全部右移动n位得到c;b最右边n个位全部丢掉(红色框),c最左边n个位补充1(绿色框)。

这里需要注意的是其左边补充的值取决于b的最高位也就是符号位:符号位是1则补充1,符号位是0则补充0。

个人心得 : 如果是正数, 直接 除以2 的 n 次方 ; 如果是负数, 老老实实算吧

右移(无符号)
输入1个参数b;n = 1

这里将参数换为b是因为b为负数,第一个位为1

b对应位全部右移动n位得到c;b最右边n个位全部丢掉(红色框),c最左边n个位补充0(绿色框)。

这里需要注意的是其左边补充的值永远为0,不管其最高位(符号位)的值。


补充基本类型占用字节数

boolean 布尔型 1/8Byte

byte 字节类型 1Byte

char 字符型 2Byte

short 短整型 2Byte

int 整数类型 4Byte

long 长整型 8Byte

float 浮点类型(单精度) 4Byte

double 浮点类型(双精度) 8Byte

hope can help you~


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
文章若有侵权请立即与我联系, 我将及时处理
微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

支付宝扫一扫,向我赞赏

回复

This is just a placeholder img.
Title - Artist
0:00