【达内课程】JAVA八种基本类型

八种基本类型

Java语言提供了八种基本类型:

byte  1字节;范围:-128 ~ 127(-2^7 ~ 2^7-1)
short  2字节;范围:-32768 ~ 32767(-2^15 ~ 2^15-1)
int   4字节;范围:-2,147,483,648 ~ 2,147,483,647(-2^31 ~ 2^31-1)
long  8字节;范围:-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807(-2^63 ~ 2^63-1)
float  4字节;单精度
double  8字节;双精度
char   2字节;
boolean  1字节;

Char

2字节,范围:0-65535
char 数据类型可以储存任何字符:

char a = ‘a’; //任意单个字符,加单引号。
char a = ‘中’;//任意单个中文字,加单引号。
char a = 111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。

注:char只能放单个字符。

char c1 = 'a';
char c2 = 97;

输出:
a
a

boolean

1字节,只有两个取值:true 和 false;
真 true 00000001
假 false 00000000

基本类型的字面值

1.整数字面值是int类型
int a = 123;
long b = 9999999999;//错,右侧是int,但超出范围

2.byte、short、char
这三种比 int 范围小的整数,可以在范围内直接赋值
byte a = 127;//对,是byte类型
byte b = 128;//错,是int类型

3.浮点数字面值是double类型
double a = 3.14;//对,是double类型
float b = 3.14;//错,右侧字面值是double类型,但左侧定义为float

4.后缀
L long
long a = 9999999999L;//这样写是正确的

F float
float a = 3.14F;

D double
double a = 3.0;
double a = 3D;

5.进制前缀
(0为数字0)
二进制的前缀为 0b
八进制的前缀为 0
十进制的前缀为
十六进制的前缀为 0x

我们可以在程序中输出一下不同进制的11

tv.setText("二进制:"+0b11+"\n"+
                "八进制:"+011+"\n"+
                "十进制:"+11+"\n"+
                "十六进制:"+0x11+"\n");

运行程序,结果如下:
在这里插入图片描述

比特、字节等单位转换

电脑中的数据都是二进制,用01表示高低电位,每位为 1 bit(比特),每 8 位为 1 字节
如果你的电脑是4G内存,换算成字节是1024(K)* 1024(M) * 1024(G) * 4字节

bit--------比特
byte--------1字节(8bit)
kb--------1024byte
mb--------1024kb
gb--------1024mb
tb--------1024gb
pb--------1024tb

了解进制转换

二进制
用二进制表示数字如下,逢2进1

00000000--------0
00000001--------1
00000010--------2
00000011--------3
00000100--------4
.
.
.
11111111--------255

由于java中左边第一位不参与计数而是用来表示正负,0表示正数,1表示负数,所以byte的范围如下

10000000-------- -128
.
.
.
11111101-------- -3
11111110-------- -2
11111111-------- -1
00000000--------0
.
.
.
01111111--------127

二进制转十进制
01111111转换成十进制数可以这样计算,每位的数字后有几位就乘2的几次方,所以计算过程如下:

1*26 + 1*25 +1*24+1*23+1*22+1*21+1*20=127

常见二进制和十进制转换
1    1
10    2
100    4
1000    8
100000    32
1000000    64
10000000    128

规律很简单,二进制每加一个零,十进制的结果乘二。原因很简单,类比十进制就可以了,十进制每加一个零,结果就乘十。这样是不是很好理解了。

二进制转十六进制
十六进制在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a ~ f)表示,其中:A ~ F表示10~15,这些称作十六进制数字

二进制中的每四位可用16进制中的一位表示,例如:
二进制:0101->十六进制:5
这个很好计算,上边我们说到二进制100->十进制4。那么二进制101->十进制5。左边补一位0,所以0101就表示十进制的5了。而因为十六进制的0123456789abcdef 就分别表示十进制的 0-15,所以二进制:0101->十六进制:5

二进制:1101->十六进制:d
同理。根据二进制转十进制的方法,1101表示十进制13,而在十六进制中d表示13

二进制转八进制
八进制是一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1

二进制中的每三位可用八进制中一位表示
000 0
101 5

‘\u0061’十进制的97,代表a,必须写完整的两个字节
所以总结如下:
1、其他所有进制转十进制都可以这么计算:每位数字x进制所在位-1
例如十六进制\u0061转十进制:1*160+6x161+0x162+0x163=97
2、十进制转其他进制,把要转换的数,除以要转换的进制,得到商和余数
例如十进制97转十六进制:97 ÷ 16 = 6 余 1 ,所以十六进制为61,必须写整的两个字节,再加上前缀即 \u0061
3、其他进制转其他进制,可以让十进制做为媒介

当然了记不住也没关系,可以直接在线进制转换

基本类型运算规则

1、运算结果的数据类型
与运算类型范围最大的一致

3/2=1//都是int,结果为int
3d/2=1.5//3d为double类型,运算范围大,所以结果为double

2、byte/short/char三种比int范围小的整数运算时,各自会先转换成int再做运算

这是java开发者在考虑到这种基本类型的运算时可能出现溢出效果而设计的

byte a = 2;
byte b = 3;
byte c = a + b;//错,因为a,b此时是int,运算结果也是int

3、整数运算溢出

Integer.MAX_VALUE + 1 运算结果会溢出,变成Integer.MIN_VALUE

运算光年的距离:
300000000606024365
这样写是错误的,因为头两个数相乘已经超出了int类型,正确写法应该是
300000000L606024365

4、浮点数运算不精确

System.out.println(2-1.9);

输出:0.10000000000000009

5、浮点数的特殊值

Infinity
无穷大
用浮点数/0会得到无穷大

System.out.println(3.14/0);

输出:Infinity

Nan
Not a number
Math.sqrt(负数)会得到Nan

System.out.println(Math.sqrt(-1));

输出:Nan

数据类型转换

数据范围小->数据范围大
直接转换即可

byte a = 127;
int b = a;
byte a = -128;
int b = a;

数据范围大->数据范围小
需要强制转换符实现强制转换

int a = 127;
byte b = (byte)a;

练习

显示byte,short,int,long的最大值最小值

在昨天的第一个Android程序中,我们在布局里,即 xml 文件中放入一个 TextView 控件

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

然后在 Activity 的 onCreate 方法中放入如下代码

        TextView tv = findViewById(R.id.textView1);
        byte a = -128;
        byte b = 127;

        short c = Short.MIN_VALUE;
        short d = Short.MAX_VALUE;

        int e = Integer.MIN_VALUE;
        int f = Integer.MAX_VALUE;

        long g = Long.MIN_VALUE;
        long h = Long.MAX_VALUE;
        
        float i = Float.MAX_VALUE;
        float j = Float.MIN_VALUE;

        Double k = Double.MAX_VALUE;
        Double l = Double.MIN_VALUE;

        tv.setText(String.valueOf(a));
        tv.append("\n"+b);
        tv.append("\n"+c);
        tv.append("\n"+d);
        tv.append("\n"+e);
        tv.append("\n"+f);
        tv.append("\n"+g);
        tv.append("\n"+h);
        tv.append("\n"+i);
        tv.append("\n"+j);
        tv.append("\n"+k);
        tv.append("\n"+l);

运行程序结果如下:
在这里插入图片描述
Float 和 Double的最小值和最大值都是以科学记数法的形式输出的,结尾的E+数字表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。
所以 1.4E-45 表示 1.4 x 10-45

交换变量

xml 文件修改为

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="doClick"
        android:text="交换" />

Activity 中增加如下方法

    public void doClick(View view) {
        EditText et1 = findViewById(R.id.editText);
        EditText et2 = findViewById(R.id.editText2);
        TextView tv = findViewById(R.id.textView1);

        String a = et1.getText().toString();
        String b = et2.getText().toString();
        String c = "";

        c = a;
        a = b;
        b = c;

        tv.setText("a=" + a);
        tv.append("\nb=" + b);
    }

运行程序,结果如下:
在这里插入图片描述

Double练习,求自由落体距离

xml代码

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入落体时间" />

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="doClick"
        android:text="求降落距离" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

java代码

 public void doClick(View view) {
        TextView tv = findViewById(R.id.tv);
        EditText et = findViewById(R.id.et);

        Double t = Double.parseDouble(et.getText().toString());
        Double d = 0.5 * 9.8 * t * t;

        tv.setText("降落距离为" + d);
    }

运行程序,结果如下:
在这里插入图片描述

牛郎织女相会需要多少只喜鹊

牛栏织女相距14.6光年,光速299792458米/s,喜鹊身长0.46米,求需要喜鹊数量

		//1光年距离
		long ly = 299792458L*60*60*24*365;
		//牛郎织女距离
		double d = 14.6*ly;
		//求喜鹊数量
		double s = d/0.46;
		//对喜鹊数量向上取整
		long l = (long)Math.ceil(s);
		System.out.println(l);

自己试一下看看需要多少只喜鹊

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值