运算符、常量和变量
</ 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 |
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条件开始,之后的表达式都不会运行,因为整个逻辑与的结果不会有任何的更改。
来源:https://www.cnblogs.com/zhuangyunliang/p/12324218.html