进制知识
二进制、八进制和十六进制
- 二进制:只有0和1两个数字,按照逢2进1的方式表示数据。
- 八进制:只有0~7八个数字,按照逢8进1的方式表示数据。
- 十六进制:由0~9以及A,B,C,D,E,F,共十六个数字,按照逢16进1的方式表示数据,其中A,B,C,D,E,F分别代表十进制的10,11,12,13,14,15。
- Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。
0b11011001 //二进制
0B11011001 //二进制
04647 //八进制
0X156A5B //十六进制
0x156A5B //十六进制
十进制转换为二进制
除二取余法
13的二进制是1101
二进制、八进制和十六进制转换为十进制
十进制的转换方式为
10^3 10^2 10^1 10^0
1000 100 10 1
x x x x
1 9 9 8
--------------------------
1000 + 900 + 90 + 8 = 1998
同理,二进制的转换方式为
2^3 2^2 2^1 2^0
8 4 2 1
x x x x
1 0 1 1
--------------------------
8 + 0 + 2 + 1 = 11
八进制的转换方式为
8^3 8^2 8^1 8^0
512 64 8 1
x x x x
2 4 7 0
--------------------------
1024 + 256 + 56 + 0 = 1336
十六进制的转换方式为
16^3 16^2 16^1 16^0
4096 256 16 1
x x x x
1 3 A 2
--------------------------
4096 + 768 + 160 + 2 = 5026
二进制转换为八进制、十六进制
二进制转换为八进制
将二进制数字从右边开始按三位一组分开作为一个单元,再把每一个单元转换成对应的十进制数即可。
11001001→11 001 001→211(八进制)
二进制转换为十六进制
将二进制数字从右边开始按四位一组分开作为一个单元,再把每一个单元转换成对应的十六进制数即可。
111011001→1 1101 1001→1D9(十六进制)
八进制、十六进制转换为二进制
八进制转换为二进制
将八进制数字的每一位转换成对应的二进制数,再按顺序将所有二进制数连接起来,最后去掉左边多余的0即可。
211(八进制)→011 001 001→11001001
十六进制转换为二进制
将八进制数字的每一位转换成对应的二进制数,再按顺序将所有二进制数连接起来,最后去掉左边多余的0即可。
1D9(八进制)→1 1101 1001→111011001
计算机中数据的存储方式
将数据编码为二进制后进行存储。
计算机中数据的最小单位
计算机中数据最小的组成单元是字节(byte,简称B),一个字节是由八个二进制位组成的。同时每个二进制位就称为位(bit,简称b), 1B = 8b。
其他数据单位
KB,MB,GB,TB,PB...
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
...
数值的存储
将数值直接转换为二进制后进行存储。
文本的存储
将文本字符编码为二进制后进行存储。
ASCII码
- 字符'A'对应的十进制ASCII码是65
- 字符'a'对应的十进制ASCII码是97
- 字符'0'对应的十进制ASCII码是48
图片的存储
将图片每一个像素进行三通道编码,即红、绿、蓝通道,每个通道都使用一字节,范围为0~255,然后将编码后的二进制数据进行存储。
声音的存储
将声音进行采样、量化和编码成二进制数据后进行存储。
视频的存储
即同时存储图片和声音数据,依然是存储二进制数据。
数据类型
有哪些数据类型
基本数据类型
基本数据类型分为四大类8种,如下表所示。
- Java默认整型变量为int类型,若想使用long类型的字面量则需要在最后加上L或l,如:16548951561655L/l。
- Java默认浮点型变量为double类型,若想使用float类型的字面量则需要在最后加上L或l,如:3.14F/f。
引用数据类型
包括类、接口类型、数组类型、枚举类型和字符串型等。
类型转换
为什么要进行类型转换
存在不同类型的变量赋值给其他类型的变量的情况。
自动类型转换
类型范围小的变量,可以直接赋值给类型范围大的变量,这就是自动类型转换。
自动类型转换的顺序:
表达式的自动类型转换
- 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。
- 表达式的最终结果类型由表达式中的最高类型决定。
- 在表达式中,byte、short、char类型是直接转换成int类型参与运算的,且只要参与运算,这些类型的值就会转换成int类型。
强制类型转换
强行将类型范围大的变量、数据赋值给类型范围小的变量,此时程序的正确性由开发者负责。
用法:
数据类型 变量1 = (数据类型)变量2或数值;
- 强制类型转换可能造成数据溢出(丢失)。
- 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。
运算符
算术运算符
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 加法 |
- | 减 | 减法 |
* | 乘 | 乘法 |
/ | 除 | 除法,在Java中两个整数相除结果还是整数。 |
% | 取余 | 获取的是两个数据做除法的余数 |
- “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
自增自减运算符
符号 | 作用 |
---|---|
自增:++ | 放在某个变量前面或者后面,对变量自身的值加1 |
自减:-- | 放在某个变量前面或者后面,对变量自身的值减1 |
- ++ 、-- 只能操作变量,不能操作字面量的。
- ++、--放在变量的前面时,先对变量进行+1、-1,再拿变量的值进行运算。
- ++、--放在变量的后面时,先拿变量的值进行运算,再对变量的值进行+1、-1。
赋值运算符
符号 | 用法 | 作用 | 底层代码形式 |
---|---|---|---|
= | 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); |
%= | a %= b | 取余后赋值 | a = (a的类型)(a % b); |
- =为基本的赋值运算符。
- +=、-=、*=、/=和%=为扩展的赋值运算符。
- 扩展的赋值运算符隐含了强制类型转换。
关系运算符
符号 | 例子 | 作用 | 结果 |
---|---|---|---|
> | 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。
- 在java中判断是否相等一定是“== ” ,千万不要把 “== ”误写成 “=”。
逻辑运算符
- 把多个条件放在一起运算,最终返回布尔类型的值:true、false。
符号 | 名称 | 作用 | 运算逻辑 |
---|---|---|---|
& | 逻辑与 | 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, 则不执行右边表达式。 |
-
在& 和|中,无论左边是 false还是 true,右边都要执行。
-
由于&&和||的运算效率更高,故其在开发中用得更多。
三元运算符
条件表达式 ? 值1 : 值2;
- 执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
运算符的优先级
优先级 | 运算符 |
---|---|
1 | () |
2 | !、~、++、-- |
3 | *、/、% |
4 | +、- |
5 | <<、>>、>>> |
6 | <、<=、>、>=、instanceof |
7 | ==、!= |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | =、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=、|= |
- 表格中,越往上的越优先,优先级相同的符号按表达式内从左到右的顺序运算。
- &的优先级高于|。
API
API是什么
API,即Application Programming Interface,应用程序编程接口,是Java写好的程序,咱们可以直接调用。
API文档是什么
Java提供的API使用说明书。
Java程序中实现接收用户键盘输入的数据
使用Java提供的Scanner类来完成,步骤如下:
- 导包:import java.util.Scanner;(IDEA会自动导入需要的包)
- 得到扫描器对象: Scanner sc = new Scanner(System.in)
- 等待接收用户输入的数据:
- int age = sc.nextInt();
- String name = sc.next();