一.计算机基础如何存储
1.计算机数据的存储使用二进制补码形式存储,并且最高位是符号位,1是负数,0是正数。
规定:正数的补码与反码、原码一样,称为三码合一;
负数的补码与反码、原码不一样:
负数的原码:把十进制转为二进制,然后最高位设置为1
负数的反码:在原码的基础上,最高位不变,其余位取反(0变1,1变0)
负数的补码:反码+1
例如:byte类型(1个字节,8位)
25 ==> 原码 0001 1001 ==> 反码 0001 1001 -->补码 0001 1001
-25 ==>原码 1001 1001 ==> 反码1110 0110 ==>补码 1110 0111
底层是用加法代替减法:-128==》-127-1==》-127+(-1)
-127- -1 ==> -127 + 1
2.一个字节可以存储的数据范围是多少?
(1)无符号:不考虑正负数
(2)有符号
1个字节:8位
0000 0001 ~ 0111 1111 ==> 1~127
1000 0001 ~ 1111 1111 ==> -127 ~ -1
0000 0000 ==>0
1000 0000 ==> -128(特殊规定)
3.如何存储小数
为什么float(4个字节)比long(8个字节)的存储范围大?
为什么double(8个字节)比float(4个字节)精度范围大?
为什么float和double不精确
因为float、double底层也是二进制,先把小数转为二进制,然后把二进制表示为科学记数法,然后只保存:
①符号位②指数位③尾数位
详见《float型和double型数据的存储方式.docx》
4.如何存储字符
Java中使用的字符集:Unicode编码集
编码表
在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别人类文字的问题呢?就产生出了编码表的概念。编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。
![](https://img-blog.csdnimg.cn/img_convert/36ef076c73fcd93ca3f382ef936b043f.png)
将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII(American Standard Code for Information Interchange 美国标准信息交换码)。
Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
5.字符常量的几种表示方式
'一个字符'
eg:'A','a'.
转义字符
eg:
\n:换行
\t:Tab
\r:回车
\u字符的Unicode编码值的十六进制型
char c2 = '';//错误,单引号中有且只能有一个字符
String s2 = "";//可以,双引号中可以没有其他字符,表示是空字符串
直接给char类型变量赋值十进制的0~65535之间的Unicode编码值
char c2 = 97;
System.out.println(c2);//a
二.运算符(6种)
运算符是一种特殊的符号,用于表示数据的运算,赋值和比较等。
运算符按功能分类可以分为6种:
- 算术运算符:12种
![](https://img-blog.csdnimg.cn/img_convert/747d90008a1c28940b4391ae201ddc14.png)
总结:
1.自加自减运算
理解:++ 运算,变量自己的值加1。反之,-- 运算,变量自己的值减少1,用法与++ 一致。
1、单独使用
变量在单独运算的时候,变量前++和变量后++,变量的是一样的;
变量前++ :例如 ++a 。
变量后++ :例如 a++ 。
2、复合使用
和其他变量放在一起使用或者和输出语句放在一起使用,前++和后++就产生了不同的效果。
(前)++:先自增1,后运算. (后)++:先运算,后自增1.
(前)--:先自减1,后运算. (后)--:先运算,后自减1.
2.“+”号的两种用法
第一种:对于+两边都是数值的话,+就是加法的意思
第二种:对于+两边至少有一边是字符串得话,+就是拼接的意思
- 赋值运算符:6种
![](https://img-blog.csdnimg.cn/img_convert/c8e30cacf40d1a98c6d47dddb31a15b0.png)
- 比较运算符(关系运算符):7种
![](https://img-blog.csdnimg.cn/img_convert/275b0441f811a29945637b1256265f7b.png)
结论:
比较运算符的结果都是boolean型的值(true或false)。
其中>,<,>=,<=不支持boolean,String类型,==和!=支持boolean和String。
==比较的是基本数据类型时比较的是变量值,如果是引用数据类型时比较的是内存地址值。
- 逻辑运算符(6种)
逻辑运算符,是用来连接两个布尔类型结果的运算符(!除外),运算结果一定是boolean值true或者false
![](https://img-blog.csdnimg.cn/img_convert/ddee02e58e03fa4d9a05c381eb2c1a97.png)
&&和&区别,||和|区别
&&和&区别:
&&和&的运算结果一样,&&有短路效果,左边为false,右边不执行;&左边无论是什么,右边都会执行。
||和|区别:
||和|的运算结果一样,||有短路效果,左边为true,右边不执行;|左边无论是什么,右边都会执行。
- 位运算符(7种)【了解】
![](https://img-blog.csdnimg.cn/img_convert/9792881522d6fe1b5ea19a079f95f331.png)
- 三元运算符(1种)(条件运算符)
三元运算符的格式:
条件表达式 ? 结果1 :结果2;
注意事项:
条件表达式的结果必须是一个boolean类型的值,及表达式的结果不是true就是false。
根据表达式的结果是true或者false,决定执行结果1,还是结果2.
如果表达式的结果是true,执行结果1;
如果表达式的结果是false,执行结果2.
结果1和结果2的数据类型要可以统一为一个。
三元运算符可以嵌套使用。
凡是可以用三元运算符的地方,一定都可以改写为if-else;但是反过来不成立。
三.流程控制
不论哪一种编程语言,都会提供两种基本的流程控制结构:分支结构和循环结构。其中分支结构用于实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码。
1.顺序结构:
任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下逐行地执行,中间没有任何判断和跳转。
2.分支结构(两种):
第一种:if(条件表达式){语句体} else {语句体};
二选一
if(条件表达式){语句体
} else {
语句体};
if(条件表达式){语句体};
多选一
if(条件表达式){语句体
} else if(条件表达式){
语句体} else if(条件表达式)...else{语句体};
总结:
if(){}else{}可以相互嵌套使用。
条件表达式的值必须要为boolean类型,即true或false。
如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略,但是,不建议省略。
else语句不能单独使用,但是if语句可以单独使用。
如果有多个if-else嵌套,else遵循就近原则;即else找最近的if执行语句。
第二种:swich-case-default
swich-case的格式为:
swich (表达式){
case 常量1 :
执行语句1;
//break;
case 常量2 :
执行语句2;
//break;
case 常量3 :
执行语句3;
//break;
case 常量1 :
执行语句1;
//break;
......
default:
执行语句n;
//break;
}
执行过程:
(1) 入口
- 当switch(表达式)中的值与case后面的某个常量值匹配时,就从这个case进入,并执行后面的执行语句。
如果该执行语句后面没有跟break关键字,则继续向下执行下一个case后面跟着的执行语句。
注意:switch(表达式)中的值不用再跟下一个case后面常量值进行匹配。只需要执行后面的执行语句就行。当遇到第一个break关键字时,switch-case结构执行结束。或者期间没有遇到break关键字;但是遇到了default关键字,并执行完default分支后面的执行语句后,swich-case执行结束。
如果该执行语句后面有跟break关键字,则立即寻找switch的结束}并结束。
- 当switch(表达式)中的值与case后面的所有常量值都不匹配时,寻找default分支进入;不管default在哪里
(2)一旦从“入口”进入switch,就会顺序往下执行,直到遇到“出口”,即可能发生贯穿。
(3)出口
自然出口:遇到switch的结束}。
中断出口:遇到了break关键字等。
总结:
(case 常量值 : )case后面的常量值不能重复,否则编译不通过。
(case 常量值 : )常量值不能是一个区间范围
switch(表达式)的值的类型一共只能是这其中6种,只能是:4种基本数据类型(byte,short,int,char),2种引用数据类型(JDK1.5之后枚举、JDK1.7之后String)
break关键字是可选的。
default关键字是可选择的,并且为之灵活。
switch-case中有多个case后面的执行语句相同,我们可以将case进行合并。
break关键字一共2个用途:
1. 用在switch..case语句中的每个case里,用于结束switch语句。
2. 用在循环结构的循环体中,用于结束当前循环的执行。---即:break写在哪个循环里,就结束哪个循环。如果break出现在循环体里,break用于结束当前循环。
3.循环结构(3种)
循环结构:在某些条件满足的情况下,反复执行特定代码的功能。
循环语句分类:
for循环
while循环
do-while循环
![](https://img-blog.csdnimg.cn/img_convert/4cf064f6d77d0a88431fbbc8d65265c9.png)
for循环结构的使用:
一、循环结构的4个要素:
①初始化条件
②循环条件 ----->是一个boolean类型
③循环体
④迭代条件
二、for循环结构的格式:
for(①;②;④){
③
}
如果②是true,
则for循环的执行过程:①--->②--->③--->④--->②--->③--->④
.......--->②--->③--->④--->②.当②为false时跳出循环。
如果②是false。结束for循环。
while循环结构的使用:
一、循环结构的4个要素:
①初始化条件
②循环条件 ----->是一个boolean类型
③循环体
④迭代条件
二、while循环结构的格式:
①;
while(②){
③;
④;
}
如果②是true时,
while循环的执行过程是:①--->②--->③--->④--->②--->③--->④
.......--->②--->③--->④--->②.当②为false时跳出循环。
如果②是false时,只执行①。后面的②③④不执行,即while循环不执行。
注意事项:
写while循环时千万小心不要丢了迭代条件,一旦丢了,就可能造成死循环。
我们写程序,要避免出现死循环。
for循环和while循环可以相互转换!
区别:for循环和while循环的初始化条件部分的作用范围不同。
do-while循环结构的使用:
一、循环结构的4个要素:
①初始化条件
②循环条件 ----->是一个boolean类型
③循环体
④迭代条件
二、do-while循环结构的格式:
①;
do{
③;
④;
}while(②);
如果②是true时,
do-while循环的执行过程:①--->③--->④--->②--->③--->④--->②
......--->③--->④--->②。当②为false时结束循环。
如果②是false时,
do-while循环的执行过程:①--->③--->④--->②。然后该循环结束。
说明:
do-while循环至少会执行一次循环体和迭代条件!
开发中,使用for和while更多一些。较少使用do-while循环。
总结:
不在循环条件部分限制次数的结构:for(;;)或者while(true).
结束循环有几种方式?目前来说只有两种。
方式一:循环条件部分返回false。
方式二:循环体中,执行break关键字。
4.嵌套循环
所谓嵌套循环:是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数。当然可以是三种循环任意互相嵌套。
嵌套循环格式:
for(初始化语句①; 循环条件语句②; 迭代语句⑦) {
for(初始化语句③; 循环条件语句④; 迭代语句⑥) {
循环体语句⑤;
}
}
当②和④为true时,双层for循环的执行流程为:①--->②--->③--->④--->⑤--->⑥--->④--->⑤
--->⑥......--->④--->⑤--->⑥--->④,当④为false时跳出内层for循环,执行外层循环。执行⑦--->②--->③--->④--->⑤--->⑥--->④,当④为false时又跳出内层for循环,执行外层循环。一直这样反复执行,当②为false时跳出外层循环,结束嵌套循环。
总结:
外层循环控制行数,内层循环控制列数。
假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m*n次。
内层循环结构遍历了一遍,只相当于外层循环循环体执行了一次。
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
5.break和continue关键字的使用
![](https://img-blog.csdnimg.cn/img_convert/033a0c7119d96c6d158d6da517bd1ef8.png)
代码如下:
![](https://img-blog.csdnimg.cn/img_convert/f0eb15daec1bc867a5d5da944e2d9438.png)