2025年java进制基础

java进制基础说明 任何东西都有规范 提到 JAVA 就会提到 2 个规范 JAVA 语言规范 JVM 规范 JAVA 语言规范主要定义 JAVA 的语法 变量 类型 文法等等 JVM 规范主要定义 Class 文件类型 运行时数据 帧栈 虚拟机的启动 虚拟机的指令集等等 JAVA 语言规范主要定义什么是 JAVA 语言 JVM 规范主要定义 JVM 内部实现 二进制 class 文件和 JVM 指令集等

大家好,我是讯享网,很高兴认识大家。



说明

任何东西都有规范,提到JAVA就会提到2个规范,JAVA语言规范、JVM规范。JAVA语言规范主要定义JAVA的语法、变量、类型、文法等等,JVM规范主要定义Class文件类型、运行时数据、帧栈、虚拟机的启动、虚拟机的指令集等等。

  • JAVA语言规范主要定义什么是JAVA语言。
  • JVM规范主要定义JVM内部实现,二进制class文件和JVM指令集等。

规范中数字的内部表示和存储

  • 整形:byte,short,int,long
  • 浮点型:float,double
  • 布尔型:boolean
  • 字符型:char
  • 数据类型 所占位数

数据类型 所占位数 int 32bit short 16bit long 64bit byte 8bit char 16bit float 32bit double 64bit boolean 1bit

备注:1字节=8位(1 byte = 8bit)

整数的表示

  • 源码:第一位为符号位(0表示正数,1表示负数)。
  • 反码:符号位不动,原码取反。
  • 负数补码:符号位不动,反码加1。
  • 正数补码:和源码相同。

备注:补码的好处:

使用补码可以没有任何歧义的表示0。

补码可以很好的参与二进制的运算,补码相加符号位参与运算,这样就简单很多了。

浮点数表示

在上图中,我们了解到Float与Double都是支持IEEE 754

我们以float来说明:

IEEE745单精度浮点格式共32位,包含三个构成字段:23位小数f,8位偏置指数e,1位符号s。将这些字段连续存放在一个32位字里,并对其进行编码。其中0:22位包含23位的小数f; 23:30位包含8位指数e;第31位包含符号s。

一个实数V在IEEE 754标准中可java进制基础以用V=(-1)s×M×2E 的形式表示,说明如下:

  • 符号s(sign)决定实数是正数(s=0)还是负数(s=1),对数值0的符号位特殊处理。
  • 有效数字M(significand)是二进制小数,M的取值范围在1≤M<2或0≤M<1。
  • 指数E(exponent)是2的幂,它的作用是对浮点数加权。

符号位 指数位 小数位 1位 8位 23位

例如根据IEEE745,计算0000000000的单精度浮点的值。

解题:

1 000000000000 符号位 指数 尾数由于指数不是全部为0 所以小数位附加1 1 1.000000000000 -1 2^(130-127) (2^0 + 2^-3)

结论:-1 * (2^0 + 2^-3) * 2^(130-127) =-9

同样,你也可以验证一下十进制浮点数0.1的二进制形式是否正确,你会发现,0.1不能表示为有限个二进制位,因此在内存中的表示是舍入(rounding)以后的结果,即 0x3dcccccd, 十进制为0., 误差0.000000001由此产生了。

进制的概念

我们常用的进制有二进制、八进制、十进制和十六进制,十进制是最主要的表达形式。

二进制是0和1;八进制是0-7;十进制是0-9;十六进制是0-9+A-F(大小写均可)。

位运算符

按位与(&)

两位全为1,结果才为1:

 0&0=0; 0&1=0; 1&0=0; 1&1=1; 
讯享网

用法:

  • 清零:如果想要一个单位清零,那么使其全部二进制为0,只要与一个各位都为零的数值想与,结果为零。
  • 取一个数中指定位:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。

例如:设X=1010 1110,取X的低4位,用X & 0000 1111 = 0000 1110 就可以得到。

按位或(|)

只要有一个为1,结果就为1:

讯享网 0|0=0; 0|1=1; 1|0=1; 1|1=1;

用法:常用来对一个数据的某些位置1;找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。

例如:将X=1010 0000 的低四位置1,用X | 0000 1111 =1010 1111 就可以得到。

 0^0=0; 0^1=1; 1^0=1; 1^1=0;

用法:

  • 使特定位翻转:找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或就可以得到; 例如:X=1010 1110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001就可以得到
  • 与0相异或,保留原值 例如:X ^ 0000 0000 = 1010 1110
  • 两个变量交换值的方法: 1、借助第三个变量来实现: C=A; A=B; B=C; 2、 利用加减法实现两个变量的交换:A=A+B; B=A-B;A=A-B; 3、用位异或运算来实现:利用一个数异或本身等于0和异或运算符合交换律 例如:A = A ^ B; B = A ^ B; A = A ^ B;

取反运算(~)

对于一个二进制数按位取反,即将0变1,1变0: ~1=0; ~0=1;

左移运算(<<)

将一个运算对象的各二进制位全部左移若干位(左边的二进制丢弃,右边补零) 2<<1 = 4 : 10 <<1 =100=4

若左移时舍弃的高位不包括1,则每左移一位,相当于该数乘以2。 -14(二进制:1111 0010)<< 2= (1100 1000) (高位包括1,不符合规则)

右移运算(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2.

例:-14(1111 0010) >> 2 = -4 (1111 1100 )

无符号右移运算(>>>)

=

说明:

  • 0x是数的十六进制表示,转成二进制表示为000000000000000000000
  • 运算的优先级,移位运算高于逻辑运算,>>>高于&
  • 位逻辑与运算 1&1 = 1 ,0&1 = 0
  • >>>无符号右移,移出部分舍弃,左边位补0;
小讯
上一篇 2024-12-28 15:34
下一篇 2024-12-30 07:31

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/1395.html