02运算符常量和变量

五迷三道 提交于 2020-02-17 23:52:51

运算符、常量和变量

</ hr>

1.数据存储【了解】
1.1数据存储单位
计算机中最小的存储单位是byte 字节。 100m 比特率 bit/s 8bit位 == 1字节  相当于12.5m/s

生活中常用的数据单位:
    1024Byte = 1 KB
    1024KB = 1 MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB
    1024PB = 1EB
红楼梦 10w字占用1.44MB
1PB = 745,654,044,44444 本红楼梦
1.1常见进制【了解】
进制单位 基数范围 规则
十进制 0~9 逢十进一
二进制 0,1 逢二进一
八进制 0~7 逢八进一
十六进制 0~9 A~F 逢G进一
十进制和二进制之间的关系
    115(10) = 111 0011 
    【辗转相除法】 115%2 = 1
    【余数倒叙】   57%2 = 1
                28%2 = 0
                14%2 = 0
                7%2 = 1
                3%2 = 1
                1%2 = 1
                1
    1011 1101(2) = 2^0 + 2^2 + 2^3 + 2^4 + 2^5 + 2^7
                 = 189
涉及到进制转换,使用计算器完成。

八进制数展示方式
    要求0开头,有一些特殊情况下可以不使用0开头
    例如: 0123 0777
十六进制数展示方式
    要求0x或者0X开头。而且在十六进制展示中,不区分大小写
    例如:0x1234 0xABCD 0xabcd
1.3原码,反码和补码【了解】
原码,反码和补码的使用,是为了降低计算机的运算逻辑复杂度

正整数和负整数为例
    118(10) = 0111 0110(2)
    正整数的原码,反码和补码都是对应的正整数的二进制位。三码合一
    -118(10)
    原码: 
        对应正整数的二进制位,最高位是 1 便表示符号位
        0111 0110(2) ==》 1111 0110(2)
    反码:
        原码按位取反,符号位不变
        0111 0110(2) ==》 1000 1001(2)
    补码:
        反码 + 1
        0111 0110(2) ==》 1000 1010(2)
2.常量
2.1生活中的常量
一周7天
一天24小时
一小时60分钟
一分钟60秒

3.141592653...

文字: 你 我 他 ABCD
语句:

数值,文字,文本这些都可以是常量!!
2.2开发中的常量
定义:
    在程序的运行过程中,不会发生改变的量,称之为常量
按照生活习惯,可以把常量划分为以下几类:
    整数:1 2 3 4 5 -1 -2 -3 -4 -5
    小数(浮点数): 3.1415926 0.618 9.8
    真假关系(布尔类型): T true F false
    字符:
        'A' 'a' '你' '我' '他'
    字符串:
        "马坡烧烤" "精酿啤酒"
        【注意】字符串常量是【英文双引号】所包含的内容
        
class Demo1{
    public static void main(String[] args){
        /* 整数 */
        System.out.println(520);
        System.out.println(521);

        /* 浮点数 */
        System.out.println(3.14);

        /* 布尔类型 */
        System.out.println(true);
        System.out.println(false);

        /* 字符常量 */
        System.out.println('A');
        System.out.println('D');

        /* 字符串常量 */
        System.out.println("LALALALALA");
        System.out.println("啦啦啦");
    }
}
2.3字符集
文字对于电脑来说, 都是图片, 字符集就是当前电脑识别文件的方式和对应的处理方式。
    使用字符要是用字符本身,不允许使用字符对应的编码!

GBK:
    新国标,包含了简体中文所有的文字,以及少数民族文字。
GB2312:
    老国标,包含了简体中文所有的文件,以及一部分的少数民族文件。
BIG5:
    中文繁体字编码集,主要用于中国台湾,中国香港,中国澳门,新加坡。
UTF-8:
    万国码,包含了所有国家的文字,也是开发中使用最多的编码,IDEA,MYSQL,HTML。
ASCII:
    美国标准协会做的编码。
2.4转义字符
功能就是把无意义的字符转化成一个带有特殊含义的字符,或者把字符本身带有特殊含义的字符转化为无意义的字符
'' ""   转义字符就是使用反斜杠开头的!
\"  \'

n t 无意义字符
\n 回车
\t Tab键

输出\的处理方式  \\ 
输出\\的处理方式 \\
转义字符\ ,有且只转义之后第一个字符
    
面试题
    请问'\40'是什么?
    空格  \之后的数字是八进制,可以默认省略0  \40 == \040
    
class Demo2{
    public static void main(String[] args){
        
        System.out.println("你好\"");
        System.out.println('\'');

        System.out.println("你\n 我\n 他");
        System.out.println("nihao \t ya");

        System.out.println("\\\\");

        System.out.println("你好\40面试官");
    }
}
【补充知识点】命名规范,标识符的命名规范,AJCG【重点】
【标识符】
    名字,diamante中使用的一些名字 变量名,方法名,接口名,类名,abstract1类名
    例如:
        邮箱注册:
            要求英文字母或者_下划线开头  6~18字符
命名规范:
    1. 标识符可以使用的字符范围:
        英文字母(a~z A~Z) 数字(0~9) 唯一可以使用的标点的符号是_
    2. 标识符要求必须使用英文字母开头
    3. 标识符严格区分大小写,大小写的含义完全不同,这是 Java中的严格规定!
    4. 标识符没有严格的长度限制,但是会考虑业务逻辑约束表示的长度
    5. 标识符必须做到【见名知意,动宾结构】
    6. 标识符要求使用驼峰命名法
        a)小驼峰
            iPhone iPad iMac
            要求首字母小写,之后的每个单词首字母大写
            studentName workName
            适用于:方法名,变量名
        b)大驼峰
            要求所有的单词首字母都要大写
            HelloWorld
            适用于:class之后的名字,或者是XXXXXXXXXXXXXX
    7. 已经被Java或者系统赵勇的标识符不能使用,关键字和保留字不能使用
        例如:public static void
3.变量
3.1 生活中的变量
时间
天气温度
年龄
银行卡余额

生活中的二元一次方程,X是未知数,就类似于开发中的变量!
3.2代码中定义变量的格式
格式:
    数据类型 变量名 = 初始化数据;     【 = 是赋值号】
变量名里面保存的数据,可以在程序的运行过程中发生改变!

数据类型;
    约束当前变量是什么类型
变量名:
    方便操作变量的名字
= 赋值号:
    把赋值号右侧的数据赋值给左侧的变量
初始化数据:
    对应数据类型的初始值
3.3八大基本数据类型【重点】
整型 占用内存空间大小 数据范围
byte 1字节(8bit) -128~127
short 2字节(16bit) -32768~32767
int 4字节(32bit) -2^31 ~ 2^31 - 1
long 8字节(64bit) -2^63 ~ 2^63 - 1
浮点型 占用内存空间大小 数据范围
float 4字节(32bit) ±3.4 * 10 ^38
double 8字节(64bit) ±1.79 * 10 ^ 308
字符型 占用内存空间大小 数据范围
char 2字节(16bit) 可以保存中文
布尔类型 占用内存空间大小 数据范围
boolean 1bit true false
3.4变量定义格式【固定格式】
变量定义遇到的问题:
1. Demo3.java:22: 错误: 不兼容的类型: 从double转换到float可能会有损失
                float floatNumber = 3.14;
                                    ^
1 个错误
解释:
    计算机存储数据时,会考虑数据的精度为首要保证!!float类型和double类型对比,double精度更高,保存的数据范围更广。计算机会认为3.14是一个double类型,这里使用一个double类型赋值到float类型,会导致精度的丢失,不能满足Java中强制乐行数据类型一致操作,报错!
    需要告知计算机,当前使用的3.14是一个float类型
    格式:
        float floatNumber = 3.14F;
        
2.给予long类型变量赋值,需要在赋值的常量之后加上一个大写的L,告知计算机这里使用的是一个long类型的常量,有助于数据类型一致化操作
    格式:
        long longNumber = 40L;
        
3.Demo3.java:46: 错误: 找不到符号
                System.out.println(aaaaaa);
                                   ^
  符号:   变量 aaaaaa
  位置: 类 Demo2
1 个错误
解释:
    变量一定是先定义后使用,未定义不能使用!
    
4.Demo2.java:48: 错误: 已在方法 main(String[])中定义了变量 ret1
                boolean ret1 = false;
                        ^
1 个错误
解释:
    定义变量时,不能再同一代码块中,出现同名变量,会导致冲突,计算机无法做出判别!
演示代码:
    class Demo3{
    public static void main(String[] args){
        /* 整形变量 */
        /* 
            byte byteNumber = 10;
            byte 是数据类型
            byteNumber 变量名
            = 赋值号
            10 初始化数据
        */
        byte byteNumber = 10;
        short shortNumber = 20;
        int intNumber = 30;
        long longNumber = 40L;
        
        System.out.println(byteNumber);
        System.out.println(shortNumber);
        System.out.println(intNumber);
        System.out.println(longNumber);
        
        /* 浮点型变量 */
        float floatNumber = 3.14F;
        double doubleNumber = 3.14;
        
        System.out.println(floatNumber);
        System.out.println(doubleNumber);
        
        /* 
            字符型变量
            如果在代码中使用到字符,请使用字符本身,不允许使用字符对应的编码
        */
        char ch1 = 'A';
        char ch2 = '中';
        
        System.out.println(ch1);
        System.out.println(ch2);
        
        /* boolean类型 */
        boolean ret1 = true;
        boolean ret2 = false;
        
        System.out.println(ret1);
        System.out.println(ret2);
        
        /*
            错误演示3
            System.out.println(aaaaaa);
        */
        
        /*
            boolean ret1 = false;
            System.out.println(ret1);
        */
    }   
}
4.运算符
4.1算数运算符
+ - x ÷ ()
    先乘除后加减
    有括号先处理括号里边的内容
    除数不能为0,无效运算
    基本法则是从左至右计算
    
+ - * / () %
    15 ÷ 4 = 3 ... 3
    
注意事项:
    1. 要关注变量在运行过程中,变量保存数据的改变。
    2. 注意运算符使用的到底是哪一个
    3. 变量的值有且只有被赋值的情况下,才会被修改,变量没有被赋值,不会更改。
    
【偷懒专用】
    += -= *= /= %=
    例如:
        num1 = num1 + num2;
        ==> num1 += num2;
演示代码:
    class Demo4 {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        
        num1 = num1 + num2; //num1 = 30 num2 = 20
        num1 = num1 * num2; //num1 = 600 num2 = 20
        num1 = num1 / num2; //num1 = 30 num2 = 20
        num1 = num1 % num2; //num1 = 10 num2 = 20
        num1 = num1 - num2; //num1 = -10 num2 = 20
        num1 += num2; //num1 = 10 num2 = 20
        
        System.out.println(num1);
        System.out.println(num2);
    }
}
4.2 自增自减运算符【面试常问】
【注意】
    自增自减运算符有且只能操作变量!
    自增相当于当前变量 += 1
    自减相当于当前变量 -= 1
    
++:
    在【变量之后】,首先执行当前语句,再执行自增操作
    在【变量之前】,首先执行自增操作,再执行当前语句
    
--:
    在【变量之后】,首先执行当前语句,再执行自减操作
    在【变量之前】,首先执行自减操作,再执行当前语句

从开发者的阅读性角度
    1. 如果使用自增自减运算符,请单独成行!
    2. 能够使用 += 1 或者 -= 1替代,就不要使用自增自减  swift 已经取消了自增自减运算符
    
面试题:
    1.
    int num = 5;
    int ret = num++ * num;
    
    ret = ?   30
    num = ?   6
    
    2.
    int num = 5;
    int ret = num * num++;
    
    ret = ?   25
    num = ?   6
    
    3.
    int num = 5;
    ++(num++);
    
    num是多少??
    语法错误!!!
    解释:
        使用小括号时,计算机会将小括号的整个整体看作是一个常数,而自增自减运算符只能在变量上使用!!!所以这个题,出现了语法错误。
演示代码:
    class Demo5 {
    public static void main(String[] args) {
        int num = 10;
        
        System.out.println("num++ = " + num++);
        System.out.println("num = " + num);  //num = 11
        
        System.out.println("++num = " + ++num);
        System.out.println("num = " + num);  //num = 12
    }
}
4.3关系运算符
> < ≥ ≤ ≠ =
这是数学中的关系运算符

> < >= <= != ==
开发中的关系运算符

关系运算符的结果是 true 或 false
4.4逻辑运算符
与:
    银行保险柜,打开一个保险箱需要两把钥匙,缺一不可
    &&
    同真为真,有假即假
或:
    自己家门,只有有一把钥匙就可以进去
    ||
    有真即真,同假为假
非:
    !
    取反
【逻辑运算符的断路原则】
int num = 10;
boolean ret = 3 > 4 && ++num > 5

num = ? 10
ret = ? false

逻辑与断路原则:
    逻辑与表达式中,如果出现了任何一个false条件,从false条件开始,之后的表达式都不会运行,因为整个逻辑与的结果不会有任何的更改。
逻辑或者断路原则:
    逻辑与表达式中,如果出现了任何一个true条件,从true条件开始,之后的表达式都不会运行,因为整个逻辑与的结果不会有任何的更改。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!