javaSE-变量及运算符

目录

变量的数据类型

基本数据类型

 1.整形数据变量

 2.浮点型数据类型

3.字符类型

4.布尔类型变量

 变量的类型转化

1.自动类型转化

2.强制类型转换 

3.int和字符串的转化 

 Java的标识符

 +的使用---字符串拼接

 转义字符

常量

运算符

算数运算符

赋值运算符

关系运算符

逻辑运算符

 位运算符



变量的数据类型

基本数据类型

 1.整形数据变量

java中整数有四种类型,byte(字节型,1个字节),int(4个字节),short(2个字节),long(8个字节)

类型字节取值

byte1-2^7~2^7-1
short2-2^15~2^15-1
int4-2^31~2^31-1
long8-2^63~2^63-1

使用long类型时,如果范围超过int范围,加L后缀

例如:long a=2222222222L;

java没有long long类型,且全都是有符号类型。

 2.浮点型数据类型

存储小数类型,float(单精度浮点型),double(双精度浮点型)

java小数默认double,定义float类型时加f后缀,例如:

float a=3.14f

public class HI{
    public static void main (String[]args){
	//	float a=3.4;//error
		double a=3.14;
		System.out.println(a);
		float b=3.14f;
		System.out.println(b);
	}
}

     float a=3.4;//error 3.4默认为double类型

3.字符类型

public class HI{
    public static void main (String[]args){
	char a='和';
	System.out.println(a);
	char b=97;
	System.out.println(b);
	}
}

  char ch=‘和’;---->可以运行--->char是2个字节

char ch=97;--->结果输出a--->java中char类型的变量的数字,计算机会自动将数字转化为所对应的字符。

4.布尔类型变量

java中boolean类型只有两个值:true和false

在JVM规范中,没有规定boolean类型的大小

public class TEXT {
    public static void main(String[] args) {
        boolean flag1=true;
        boolean flag2=false;
        System.out.println(flag1);
        System.out.println(flag2);

    }
}

 变量的类型转化

1.自动类型转化

当把类型取值范围小的数值直接赋值给另外一个取值范围大的数据类型变量,系统会产生自动类型转化。
java的自动类型转化图

 1.long可以转化为float

 根据国际标准IEEE754,任何一个二进制浮点数都可以表示为

●(-1)^S×M×2^E

● (-1)^S表示符号位,S=1,为负数,S=0为正数

● M表示有效数字,大于等于1,小于2 使用二进制形式

●2^E表示指数位

规定:对于32位浮点数,最高位是符号位S,下来的8位是指数E,剩下的23位是有效数字M。

 (浮点)数值 =      尾数    ×    底数 ^ 指数,(附加正负号)

 例如:5.5就是101.1  十进制表示为5.5*10^0,二进制表示为1.011*2^2,其中s=0,E=2,M=1.011

十进制的-0.625 二进制就是-0.101,表示为-1.01×2^(-1),S=1,M=-1.01,E=-1

指数位(E):共8位为指数位,范围-127~128。另外,标准中,还规定了,当指数位8位全0或全1的时候,浮点数为非正规形式(这个时候尾数不一样了),所以指数位真正范围为:-126~127。
尾数位(M)二进制形式表示共23位为尾数位。小数部分最高有效位是1的数被称为正规(规格化)形式。小数部分最高有效位是0的数被称为非正规(非规格化)形式,其他情况是特殊值 尾数位大于1,小于2

于是float最大值< 2*2^127=2^128 最小值>-2^2^127=-2^128

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

long类型有8个字节,64个bite位,最大值2^63-1,最小值-2^63

所以说float的表示范围大于long

补充:

E是无符号类型整数。E是8位时,范围是0~255,E是11位时,范围是0~2047,但是,科学计数法中的E可以是负数,所以说存入内存的真实的E需要加127或者1023,例如:

float a=5.5  写成二进制:101.1 即表示为1.011×2^2    S=0,M=1.011,E=2

内存的存储方式 E=2+127=129     二进制1000 0001

01000000101100000000000000000000

将E取出时:减去127得到真实的E

2.char和int的转化

char的各种字符有对应的ASCII码值,char类型转化称为int类型,得到编码值。

一个汉字能转换成数字int类型吗?答案是可以的,因为计算机对汉字的储存也是通过某种编码规则相对应的数字来储存的。

 class HI {
     public static void main(String[] args) {
         char a='c';
         int b=a;
//'c'的ASCII码值是99,那么b得到了'c'的ASCII码值
         System.out.println(b);
         char c='韩';
         int d=c;
//'韩'对应的Unicode编码是38889,那么d就是38889
         System.out.println(d);
     }

 }

2.强制类型转换 

强制类型转化指的是两种数据类型之间的转化需要显示声明。当两种数据类型彼此不兼容,或者目标类型取值范围小于源类型时,自动转化无法进行,需要进行强制类型转化。


public static void main(String[] args) {
    int a=127;
  //  byte b=a;//error int类型不自动可以转化为byte
    byte b=(byte)a;//强转,且a在byte的范围之内
    System.out.println(b);

    int m=129;
    byte n=(byte)m;//强转,且m不在byte的范围之内,会有误差
    // byte s=128;//error 128不在byte的范围之内
    System.out.println(n);

    byte Max=3 ,Min=4;
   // byte Ans=Max+Min;//报错 两个byte被提升成整形,结果是整形
    byte Ans=(byte)(Max+Min);
    System.out.println(Ans);

    boolean l=false;
   // int b=(int)l; //error 类型不匹配

    int p=2;
    long t=3L;
    //int y=p+t;//error int+long 小的类型和大类型一起参与运算,自动提升类型
    long y=p+t;
}

3.int和字符串的转化 

c语言中转化需要使用atoi函数,java可以直接转化。

Integer是int的包装类 ,包装类里面有方法,可以进行int和string转化的相关操作

public static void main(String[] args) {
         String a="123";
         int ret=Integer.valueOf(a);
         System.out.println(ret);
         System.out.println(ret+2);
         System.out.println(Integer.valueOf(a));
         int s=12;
         
         String str=String.valueOf(s);
         System.out.println(str);
     }

 Java的标识符

java标识符由字母,数字,下划线(_)和美元符号($)组成,但是不能以数字开头,也不可以是java的关键字 

c标识符由字母,数字,下划线(_)组成,但是不能以数字开头,也不可以是c的关键字

Java有字符串类型,c语言没有字符串类型

 String是引用类型

 +的使用---字符串拼接

 class HI{
    public static void main (String[]args){
     String str="Hello";
        System.out.println(str+"world");
        System.out.println(str+10+20);
        System.out.println(10+20+str);
        System.out.println("10"+"20"+str);
        System.out.println(str+(10+20));
    }
}

 

 转义字符

 class HI {
     public static void main(String[] args) {
         System.out.println("bit");//bit
         System.out.println("\"bit\"");//"bit"
         System.out.println("\\bit\\ ");// \bit\
         System.out.println("/bit/");// /bit/
     }

 }

常量

字面常量:例如:10 90 

字符常量:例如:‘1’,‘a'

字符串常量:例如:"asd"

final修饰的常量---不可更改

c语言有const修饰的常变量,java用final修饰

final int a=10;

a=99; //报错 a是常量

运算符

算数运算符

加减乘除四则运算,这里强调下除法

进行除法运算时,当除数和被除数都是整数时,得到的也会是整数,有小数参与运算时得到小数。

public static void main(String[] args) {
         System.out.println(1/2);//0
         System.out.println(1.0/2);//0.5
     }

取模运算

取模运算时,符号取决于被模数(%左边的符号)

java中可以对小数求余数

public static void main(String[] args) {
         System.out.println(-10%3);//-1
         System.out.println(-10%-3);//-1
         System.out.println(10%3);//1
         System.out.println(10%-3);//1

         System.out.println(3.5%3);//0.5
     }

赋值运算符

在使用+=,-=,*=、/=,%=运算符时,会自动发生强制类型转化

public static void main(String[] args) {
         short a=3;
       // a=a+3;//error a+3发生整形提升,结果是int类型
         a=(short)(a+3);
         a+=3;//+=运算符自己发生强制类型转化
         System.out.println(a);
     }

关系运算符

==,!=,>,>=,<,<=

关系运算符的结果是boolean类型,true和false

public static void main(String[] args) {

             System.out.println(3>1);//true
         System.out.println(3>=1);//true
         System.out.println(3<=1);// false
         System.out.println(3==1);//  false
     }

逻辑运算符

逻辑运算符用于对布尔类型的值进行操作,返回值也是boolean类型

&:操作符两边都是true时,结果是true,但是不管左边是true还是false,右表达式都参与运算

|:操作符两边有一个true时,结果是true,但是不管左边是true还是false,右表达式都参与运算

^:操作符两边相同时,结果是false,不同时结果是true

!:取反

&&:短路与:操作符两边都是true时,结果是true,但是当左边是false时,右表达式不参与运算

!!:短路或:操作符两边有一个true时,结果是true,但是当左边是true时,右表达式不参与运算

在这里插入图片描述

 位运算符

针对二进制的每一位来进行运算

&:参与运算的两个操作数,按照二进制形式进行&运算,相同位的两个二进制位都是1则为1,否 则是0

00000110

     &

00001011

------------

00000010

|:参与运算的两个操作数,按照二进制形式进行|运算,相同位的两个二进制位至少有一个1则为1,否则是0

00000110

     |

00001011

------------

00001111

~:针对一个操作数,,按照二进制形式进行~运算,对每个二进制位取反

~00000110 

------------

11111001

^:参与运算的两个操作数,按照二进制形式进行^运算,相同位的两个二进制位相异为1,相同是0

00000110

     ^

00001011

------------

00001101

位操作符:<<,>>,<<<

<<:左移操作符,将二进制位左移,左移部分舍去,右边补0

00000110<<2                      

___________                    

00011000                             

11111111<<1---- -1的补码

------------

11111110---补码  10000010----原码(-2)

>>:右移操作符,将二进制位右移,右移部分舍去,左边补符号位

00001011>>1                        

-------------------                      

00000101                         

    

11111111>>2---- -1的补码

 -------------------

11111111 ---补码(-1)

>>>:无符号右移,右移操作符,将二进制位右移,右移部分舍去,左边补0

00001011>>>1                      

-------------------

00000101                          

11111111 111111111 11111111   11111111>>>2---- (-1)的补码

 ----------------------------------------

00111111  11111111 11111111 11111111---数字:1073741823

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值