首页 > 编程知识 正文

java运算符优先级,java float精度

时间:2023-05-04 17:08:13 阅读:120232 作者:4663

java数据类型分为四类:布尔型、整数型、浮点型和字符型。 下图:

类:逻辑型布尔型

布尔型数据只允许值true或false。 与c语言不同,true和false不能替换为整数0或非零整数。

关于布尔型变量在jvm中占多少字节,java规范没有给出准确的定义。 但是,《Java虚拟机规范》一书中定义了“布尔”数据类型,但仅提供非常有限的支持。 Java虚拟机没有专用于布尔值的字节码指令。 编译后,在Java语言表达式中使用的boolean值将被Java虚拟机中的int数据类型替换,boolean数组将编码为Java虚拟机的byte数组,每个元素的boolean元素占用8位。” 因此,可以看到布尔型单独为4字节,在数组中再为1字节。

类别:文本类型char

常数是用单引号括起来的一个字符。 例如,以下情况:

char eChar='a ';

char cChar='中';

在java中,char类型用unicode编码,每个字符占两个字节。

第三类:整数型(字节、短整型、整型、长整型) )。

每个整数类型占用的存储容量和显示范围如下:

类型

存储空间

表示范围

字节

1字节

-128--127

短整型

2字节

-2^15(-32768(-2^15-1 ) 32767 )

资讯科技

4字节

-2^31(-2147483648(-2^31-1 ) 2147483647 () ) ) ) ) ) ) 652 )

龙格

8字节

-2^63--2^63-1

缺省情况下,java整数常量为int类型,声明long类型的常量可以后跟" l "或" l ",如下所示:

int i=600; //正确

long lo=555L; 如果不输入//L,就会发生错误

有趣的是,short常量可以直接声明,如short=3

但是,任何类型的常数,常数值都不会超出其所能表示的范围。 例如,以下情况:

短整型S1=5; //正确

short s2=32769; //错误,超出了-2^15(-32768 )-2^15-1 ) 32767 )的范围

int i=2147; //正确

int i=2147483649; //错误,超出了-2^31(2147483648(2^31-1 ) 2147483647 )的范围

第四类:浮点型(浮动、双精度) )。

数学中从0到1有无数个浮点数; 另一方面,因为计算机是离散的,所以显示的时候有误差。 计算机在精度(用小数点后多少位正确表示)、浮动小数点数比较时a==0.1不合适,应该是a-0.1==0。 因为a为0.1时,即使有误差,a-0.1==0也表示为a和0.1都有误差的计算机二进制文件。

每种浮点数类型的存储容量和显示范围如下:

类型

存储空间

表示范围

浮动

4字节

-3.403e38----3.403e38

双精度

8字节

-1.798e308----1.798e308

缺省情况下,java浮点常量为双精度类型,如果要声明它始终为浮点类型,请使用f或f,如下所示:

双精度d=123.6//正确

浮动f=13.5 f; 如果不输入//f,就会发生错误

java移位运算符:

java运算符具体有哪些,有各自的优先顺序,在此不详细说明,只选择更复杂的移位运算符详细说明,制定总则。 移动运算符有三种:左移运算符()、无符号右移运算符()。

在计算机中以补数表示数据,因此进行移位操作时,也按位移动补数。

1、左移运算符(

左移运算符

一般格式如下。

value num

num指定将值value移位的位数。

请记住左移的一条规则。 舍弃最高位,用0补最低位

如果移动的位数超过此类型的最大位数,编译器将对移动的位数进行建模。 相对于int型移动33比特时,实际上只移动332=1比特。

左移运算符运算规则

以二进制格式将所有数字左移相应的位数,将高位错开(舍弃),将低位空位填充为零。

如果左移的操作数为字节和短整型,则这些类型将自动放大为int型。

在不溢出数字的前提下,对于正数和负数,向左移动一位相当于2的1次幂,向左移动n位相当于2的n次幂。

板栗:

数据127,补码与原代码相同。 0111 1111。

向左挪一个

:1111 1110-> 补码对应的原码为:1000 0010 对应十进制:-2

左移二位:1111 1100-> 补码对应的原码为:1000 0100 对应十进制:-4

左移三位:1111 1000-> 补码对应的原码为:1000 1000 对应十进制:-8

左移四位:1111 0000-> 补码对应的原码为:1001 0000 对应十进制:-16

左移五位:1110 0000 -> 补码对应的原码为:1010 0000 对应十进制:-32

左移六位:1100 0000 -> 补码对应的原码为:1100 0000 对应十进制:-64

左移七位:1000 0000-> 补码对应的原码为:1000 0000 对应十进制:-128

左移八位:0000 0000-> 补码对应的原码为:0000 0000 对应十进制:0

2、右移运算符(>>)

它的通用格式如下所示:

value >> num

num 指定要移位值value 移动的位数。

右移的规则只记住一点:符号位不变,左边补上符号位

运算规则:

按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1

当右移的运算数是byte和short类型时,将自动把这些类型扩大为int型。

右移一位相当于除2,右移n位相当于除以2的n次方。

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

它的通用格式如下所示:

value >>> num

num 指定要移位值value 移动的位数。

无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位

无符号右移规则和右移运算是一样的,只是填充时不管左边最高位的数字是正是负,都用0来填充,无符号右移运算只针对负数计算,因为对于正数来说这种运算没有意义。

无符号右移运算符>>>只是对32位和64位的值有意义

举例对比>>与>>>:

-5用二进制补码表示1111 1011,红色为该数符号位

-5>>2:1111 1011-------------->1111 1110,11为标志位

-5>>>2:1111 1011-------------->0011 1110,00为补充的0

上文中粗体字体或红色字体的内容为重点了解或者记忆的内容,更多信息,请用微信扫码关注本人公众号

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。