[打卡]Day2--java数据类型

来源:互联网 发布:stm32f1数据手册 编辑:程序博客网 时间:2024/05/21 09:55

今天学习了数据类型,以及数据类型的转换问题。把昨天拉下来的学完了,今天周六,本来要考软件设计师,但是没有复习,早上也不想起床所以就没去考,白花了140大洋报名费--。十点起床去吃了个早饭,然后开始学java基础。

今天看到一句话:觉得时间过得快,是不过是因为我们的生活过的一成不变而已。

《--------------------------------------------------------------------》

整数默认的数据类型为int
例如:
 long i = 10000000000; 会报错,虽然10000000000(超出int范围)的值在long型数据表示的范围内,
但由于默认为int型,在赋值给long时仍然会报错。
解决办法:
 long i = 100000000L; 在数值后加L(或者小写的l)

同理小数的数据类型默认为double
float a  = 12.345;  会报错可能损失精度,因为12.345默认是double型 赋值给
范围较小的float型时可能会损失精度 
解决办法:
 float a = 12.345F; 在数值后面加F(或者小写的f)


数值类型转换的问题:
long类型的数字32768转成short类型后得知为多少?
解决:
1.负数在内存中以二进制反码的形式存储
2.不同数据类型的二进制码位数不同,例如byte为八位(-128--127) short为16位(-2~16 -- 2~16-1)
3.超出范围的部分直接丢弃
同例:
byte b = (byte)129;
先将129化位二进制求原码:0000 0000 1000 0001 取后8位,最高位是1,说明是负数,并且是一个补码,
先求反码,就是补码减一,1000 0000,然后求原码,1111 1111表示-127。
注意:反码为1000 0000 0000 0000的数字是-32768


《---------------------------------------------------------------------------》

 默认转换:(从小到大)

1.byte short char-int-long-float-double (有long型转为long有float转为float有double 转为double)
2.byte short char相互之间不转换,他们参与运算首先转换成int类型
数据参与运算都是补码运算(正数的补码仍然是正数)
例子:
byte a = 3;
int b = 4;
byte c = a + b;//有问题,可能损失精度
int d = a+b;//没问题

《-------------------------------------------------------------》

/*
强制转换:
从大的数据类型转到小的数据类型
格式:
目标数据类型 变量 = (目标数据类型)被转换的数据;
    byte     c   =  (byte)(a+b);
注意:
不要随意使用强制转换,可能会有精度损失问题。
*/

class DateTypeDemo1{public static void main(String[] args){byte a= 3;                int b = 4;byte c = a + b;//有问题byte c = (byte)(a + b);}}

class DateTypeDemo2{public static viod main(String[] args){double d = 12.345;float f = (float)d;//f1是将double类型转换位float类型;f2直接定义了float类型的数据//一般推荐使用第二种float f1 = (float)12.345;float f2 = 12.345F;}}

class DateTypeDemo3{public static void main(String[] args){byte b1 = 3, b2 = 4, b,c,d;b = b1 + b2;//变量在运行时才能确定值,类型提升。先将b1、b2提升为int型,计算后再赋值。会报错。c = 3 + 4;  //常量在编译期间就可以确定其值,先计算结果,然后看是否在byte范围内,若在则编译通过。d = b1 + 3; //有错,损失精度 同上}}

/*
字符串类型数据和其他数据+,结果为字符串类型
这里的'+'不是加法运算,而是字符串连接符
*/
class DateTypeDemo{public static void main(String[] args){System.out.println("hello" + 'a' + 1);//结果为helloa1System.out.println('a' + 1 +"hello");//结果为98helloSystem.out.println("5+5=" + 5 + 5);//5+5=55System.out.println(5+5+"=5+5 " );//10=5+5}}


《--------------------------------------------------------------------------------------》

/*
byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
练习:byte b = (byte)300;
*/

class DataTypeDemo7 {public static void main(String[] args) {//因为byte的范围是:-128到127。//而130不在此范围内,所以报错。//byte b = 130; //我们可以使用强制类型转换byte b = (byte) 130;//结果是多少呢?System.out.println(b);}}
/*
分析过程:
我们要想知道结果是什么,就应该知道是如何进行计算的。
而我们又知道计算机中数据的运算都是补码进行的。
而要得到补码,首先要计算出数据的二进制。

A:获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型的了。
10000010 
这个结果是补码。
C:已知补码求原码。
符号位 数值位
补码: 10000010

反码: 10000001

原码: 11111110
*/

0 0
原创粉丝点击