day02 在深圳黑马程序员学习Java EE的第二天

1、变量计算在计算机中的存储原理

都是采用二进制:使用0、1,按照逢2进1的规则表示数据来存储

计算机中表示数据的最小单元:一个字节(byte, 简称B,是使用8个二进制位组成的),字节中的每个二进制位就称为 位(bit,简称b), 1B = 8b。

平时我们接触到的数据不只是数字啊,我们接触到的都是电影,图片、声音、文字啊,这些在计算机里也是用二进制存储的;

声音数据存储范围

图片就是无数个像素点组成的,l每个像素点的数据:用0 ~ 255*255*255表示其颜色;

字符在计算机中是如何存储的?

答:字符存的是ascii码表中对应的数字的二进制形式,lASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。

2、进制的转化

2.1十进制转二进制

十进制数转二进制数:除二取余法

2.2 二进制转十进制

从右往左给二进制的每一位数依次按照1 2 4 8...标记,只需要将为1的位置上的十进制数字加起来,就是二进制对应的十进制

2.3八进制与十六进制

注意:Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头

2.4二进制转八进制

2.5二进制转十六进制

package com.ithema;

/**
 * 数据书写格式
 */
public class Case01 {
    public static void main(String[] args) {
        //二进制书写格式
        int a = 0B110;
        System.out.println("a="+a);//a=6

        //八进制书写格式
        int b = 0567;
        System.out.println("b="+b);//b=375
        System.out.println("b = " + b);//b=35
        //十六进制书写格式
        int c = 0XFA;
        System.out.println("c="+c);//c=250

    }
}

2.6另一种方法

其实进制的转化不需要去算,只需要记住有这个方法就行,电脑上自带一个计算器

3、计算机的组成单位

计算机表示数据的最小组成单元是:字节,1B = 8b,在B的基础上,计算机发展出了KB、MB、GB、TB、…. 这些数据单位。

4、数据类型的分类

四大类八种

数据类型

内存占用(字节数)

数据范围

整型

byte

1

-128~127

short

2

-32768~32767

int(默认)

4

-2147483648~2147483647 (10位数,大概21亿多)

long

8

-9223372036854775808 ~ 9223372036854775807 (19位数)

浮点型(小数)

float

4

1.401298 E -45 到 3.4028235 E +38

double(默认)

8

4.9000000 E -324 到1.797693 E +308

字符型

char

2

0-65535

布尔型

boolean

1

true,false

5、自动类型转换

类型范围小的变量,可以直接赋值给类型范围大的变量。存在不同类型的变量赋值给其他类型的变量,所以需要自动类型转换。

package com.ithema;

/**
 * 自动类型转换
 * 类型范围小的变量,可以直接赋值给类型范围大的变量。
 */
public class Case03 {
    public static void main(String[] args) {
        //将byte类型的数据 直接 赋值给 int类型的变量
        byte  a = 116;
        int  b ;
        b = a;
        System.out.println("b = " + b);//b=156
        //将int类型的数据 直接 赋值给 double类型
        int c = 1564;
        double d;
        d = c;
        System.out.println("d = " + d);//d=1564.0


        //将char类型的数据('a') 直接 赋值给 int类型
        char e = 'F';

        int f ;
        f= e;
        System.out.println("f = " + f);//f=70


    }
}

6、表达式类型转换

在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算

注意:表达式的最终结果类型由表达式中的最高类型决定,在表达式中,byte、short、char 是直接转换成int类型参与运算的。

package com.ithema;
/**
 * 表达式类型转换
 * 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围变量的类型,再参与运算。
 * byte 、short、char---->int---->long---->float---->double
 * 表达式的最终结果类型由表达式中的最高类型决定。
 * 在表达式中,byte、short、char 是直接转换成int类型参与运算的。
 */
public class Case04 {
    public static void main(String[] args) {
        // byte short char 类型运算 相加
        byte a1 = 125;
        char a2 = 'A';
        short a3 = 155;
        int d = a1+a2+a3+10;
        System.out.println("d = " + d);

    }
}

7、强制类型转换

类型范围大的数据或者变量,直接赋值给类型范围小的变量,会报错。

强行将类型范围大的变量、数据赋值给类型范围小的变量

int a =20;
bite b=(byte)a;

执行原理

int a = 20;byte b =  (byte)a;
System.out.println(b); // 20

int i = 1500;byte j =  (byte)i;
System.out.println(j); // -36

注意事项:强制类型转换可能造成数据(丢失)溢出;浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。

8、运算符

8.1基本运算符

符号

作用

说明

+

参考小学一年级

-

参考小学一年级

*

参考小学二年级,与“×”相同

/

与“÷”相同,注意:在Java中两个整数相除结果还是整数。

%

取余

获取的是两个数据做除法的余数

案例:数值拆分,一个三位数,将其拆分为个位、十位、百位后,打印在控制台

package com.ithema;
/**
 * 数值拆分
 * 需求:一个三位数,将其拆分为个位、十位、百位后,打印在控制台
 * 公式总结:
 *      个位 :数值 % 10
 *      十位 :数值 / 10 % 10
 *      百位 :数值 / 100 % 10
 *      千位 :数值 / 1000 % 10
 */
public class Case07 {
    public static void main(String[] args) {
        int a=  10086;
        int b= a%10;
        int c= a/10%10;
        int d= a/100%10;
        int e =a/1000%10;
        int f= a/10000%10;
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println("d = " + d);
        System.out.println("e = " + e);
        System.out.println("f = " + f);
    }
}

8.2自增自减运算符

符号

作用

自增:++

放在某个变量前面或者后面,对变量自身的值加1

自减:--

放在某个变量前面或者后面,对变量自身的值减1

++ 、-- 只能操作变量,不能操作字面量的

++、--如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别;放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1

package com.ithema;

/**
 * 自增自减 与 自增自减注意
 *
 * 自增:++ 放在某个变量前面或者后面,对变量自身的值加1
 * 自减:-- 放在某个变量前面或者后面,对变量自身的值减1
 * 注意:
 *      ++ 、-- 只能操作变量,不能操作字面量的。
 *
 * ++、--如果不是单独使用(如在表达式中、或者同时有其它操作),放在变量前后会存在明显区别
 *      放在变量的前面,先对变量进行+1、-1,再拿变量的值进行运算。
 *      放在变量的后面,先拿变量的值进行运算,再对变量的值进行+1、-1
 */
public class Case08 {
    public static void main(String[] args) {
        int n = 10;
        int rs = n++;
        System.out.println("rs = " + rs);

        int a = 10;
        int b = 15;
        int c = ++a+ --b - b-- +a +++a-b;
        System.out.println("c = " + c);

        int rs2 = ++n;
        System.out.println("rs2 = " + rs2);


    }
}

8.3赋值运算符

就是“=”,从右边往左看

符号

用法

作用

底层代码形式

+=

a+=b

加后赋值

a = (a的类型)(a + b);

-=

a-=b

减后赋值

a = (a的类型)(a - b);

*=

a*=b

乘后赋值

a = (a的类型)(a * b);

/=

a/=b

除后赋值

a = (a的类型)(a / b);

%=

a%=b

取余后赋值

a = (a的类型)(a % b);

注意:扩展的赋值运算符隐含了强制类型转换

package com.ithema;

/**
 * 赋值运算符
 *
 * 基本的赋值运算符:= (从右边往左看)
 * 扩展的赋值运算符:+=、-=、*=、/=、%=
 */
public class Case10 {

    public static void main(String[] args) {
        //-=的使用
        int a1 = 15;
        int a2 =6;
        a2-=a1;
        System.out.println("a2 = " + a2);

        //+=是使用
        char a3='A';
        int  a4 = 5;
        a3+= (char)a4;
        System.out.println("a3 = " + a3);

        //*=的使用
        int a5=4;
        char a6='Z';
        a5*=a6;
        System.out.println("a5 = " + a5);


        ///=的适应
        int a7 = 84;
        char a8 = 's';
        a7 /=a8;
        System.out.println("a8 = " + a7);
    }
}

8.4关系运算符

符号

例子

作用

结果

>

a>b

判断a是否大于b

成立返回true、不成立返回false

>=

a>=b

判断a是否大于或者等于b

成立返回true、不成立返回false

<

a<b

判断a是否小于b

成立返回true、不成立返回false

<=

a<=b

判断a是否小于或者等于b

成立返回true、不成立返回false

==

a==b

判断a是否等于b

成立返回true、不成立返回false

!=

a != b

判断a是否不等于b

成立返回true、不成立返回false

判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false。

8.5逻辑运算符

符号

叫法

例子

运算逻辑

&

逻辑与

2 > 1 & 3 > 2

多个条件必须都是true, 结果才是true; 有一个是false,结果就是false

|

逻辑或

2 > 1 | 3 < 5

多个条件中只要有一个是true, 结果就是true;

!

逻辑非

! (2 > 1)

就是取反:你真我假,你假我真。!true == false、!false == true

^

逻辑异或

2 > 1 ^ 3 > 1

前后条件的结果相同,就直接返回false,前后条件的结果不同,才返回true

符号

叫法

例子

运算逻辑

&&

短路与

2 > 10 && 3 > 2

判断结果与“&”一样,过程不同:左边为 false,右边则不执行。

||

短路或

2 > 1 | | 3 < 5

判断结果与“|”一样,过程不同:左边为 true, 右边则不执行。

! && || 运行效率高,用的更多

package com.ithema;

/**
 * 逻辑运算符
 *
 * 把多个条件放在一起运算,最终返回布尔类型的值:true、false。
 *      &   :逻辑与    多个条件必须都是true, 结果才是true;  有一个是false,结果就是false
 *      |   :逻辑或    多个条件中只要有一个是true, 结果就是true;
 *      !   :逻辑非    就是取反:你真我假,你假我真。!true == false、!false == true
 *      ^   :逻辑异或   前后条件的结果相同,就直接返回false,前后条件的结果不同,才返回true
 *
 *      &&  : 短路与   判断结果与“&”一样,过程不同:左边为 false,右边则不执行。
 *      ||  : 短路或   判断结果与“|”一样,过程不同:左边为 true, 右边则不执行。
 *
 *      注意:在java中, “&” 、 “|”:   无论左边是 false还是 true,右边都要执行。
 *
 */
public class Case12 {
    public static void main(String[] args) {
        int a1=2;
        int a2=-8;
        int a3=45;
        int a4=8;
        System.out.println("a1<a2&a1>a3 = " + (a1 < a2 & a1 > a3));
        System.out.println("a3<a4|a4>a2 = " + (a3 < a4 | a4 > a2));
        System.out.println("!(a2>a4) = " + !(a2 > a4));
        System.out.println("a1>=a2^a3<=a4 = " + (a1 >= a2 ^ a3 <= a4));
        System.out.println("a2>=a3&&a4>=a1 = " + (a2 >= a3 && a4 >= a1));
        System.out.println("a2>=a3||a4>=a1 = " + (a2 >= a3 || a4 >= a1));

    }
}

8.6三元运算符

条件表达式 ? 值1:值2;

执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2

package com.ithema;

/**
 * 三元运算符
 *
 * 三元运算符: 条件表达式 ?  值1 : 值2;
 * 执行流程:首先计算条件表达式的值,如果值为true,返回值1,如果为false,返回值2。
 *
 */
public class Case13 {
    public static void main(String[] args) {
        //1.需求:分数大于等于60 输出 "考试通过" 反之输出 "成绩不合格"
        int a1=86;
        System.out.println(a1>=60?"考试通过":"成绩不合格" );

        //2.需求:找到3个整数中最大的数    例如:50 40 60
        int a = 50;
        int b = 40;
        int c = 60;
        int max = a > b ? a : b;//50
        max = max > c ? max : c;
        System.out.println("max = " + max);


        //3.表达式中,哪个运算符先执行后执行是要看优先级的,例如 “*、/” 的优先级高于”+、-”。
        //() > 自增自减 > 算术运算符 > 关系运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符
        //System.out.println(10 > 3 || 10 > 3 && 10 < 3);
        System.out.println(10 > 3 || 10 > 3 && 10 < 3);
        System.out.println(10 > 3 || (10 > 3 && 10 < 3));

    }
}

8.7运算符优先级

9案例知识:在程序中接收用户通过键盘输入的数据

package com.ithema;
//1.导包(使用java提供的工具就需要导包)

import java.util.Scanner;

/**
 * 键盘录入技术
 * <p>
 * 请在程序中,提示用户通过键盘输入自己的姓名、年龄,并能在程序中收到这些数据,怎么解决?
 */
public class Case14 {
    public static void main(String[] args) {
        //1.导包(不用自己敲)

        //2.创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        //3.接收数据(根据实际的情况选择相应的方法来接收数据)
        System.out.println("请输入您的姓名:");
        String name = sc.next();//sc.next().var enter自动编写好返回值变量类型

        System.out.println("请输入您的年龄");
        int age = sc.nextInt();

        System.out.println("您输入的姓名 = " + name);
        System.out.println("您输入的年龄 = " + age);
    }
}

加油!

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug陈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值