JAVA笔记
1.什么是java语言?java能做哪些开发?
计算机只能识别0和1组成达机器语言,人们可以学习和掌握机器语言,但是非常麻烦,
eg:如10进制达10,机器语言:00000000 00000000 00000000 00001010.
人们对机器语言进行简化,简化到极致就产生高级语言,java就是这种高级语言。
1991年,SUN公司,GREEN项目小组
1992年,JAME GOSLING是java之父
1995年,java问世
1996年,JDK1.0问世
1999年,JAVA2.0(分为三部分:JAVA:SE/JAVA EE/JAVA ME)
2009年,Oracle公司以79亿美元的交易总额收购了SUN。
JAVA SE-java平台标准版,java平台的基础
java平台标准版包含了运行java程序的基本环境和核心类库。
也定义了基于桌面开发的基础类库,
eg:office,捕鱼达人
JAVA EE-java平台企业版
java平台企业版是构建在java平台标准版基础上的,用于构建企业级应用
所谓企业级应用就是给一些大型商业组织,企业开发应用程序,
eg:用来管理财务的用友财务软件,
基于B/S架构的互联网网站开发
eg:百合网
JAVA ME-java平台移动版(由于硬件方面发展不够,所以此方面基本转移到安卓)
java ME是指给移动设备,便携式电子设备或嵌入式设备(智能手机,pad,电子书)提
供java的解决方案。
什么是编程
命令计算机按照一定的顺序去处理指令和数据。JAVA EE-java
软件开发流程
IT生产业;计算机硬件业,通讯设备业,软件,计算机及通信
IT应用业
岗位设置
广州市华软科技,同杰软件,亿讯软件,泰豪软件,凯通软件,科蓝软件,
电子商务;阿里 一九在线 秒够 维品会
通信行业;电讯盈科 天讯瑞达 广州金鹏集团有限公司 香港城市电讯
游戏类;擎天柱 众游 游爱网若 手游网络 4399
电力;北京中合实创电力科技有限公司
制造业;光宝电子 金尊荣日化品
金融业;
政府;
电信;
岗位
运维 实施工程师 研发 软件测试 需求分析
Linux是一种操作系统
管理其他软件的一个软件
起源1991年,1995你啊随着互联网的发展而流行起来
是一个开源的操作系统,是一个类Unix操作系统
目前,Linux是主流的服务器操作系统,广泛应用与互联网,云计算,只能手机(Android)等领域;
由于java主要用于服务器端的开发,因此java应用的部署环境有很多为Linux。
User home 【用户主目录】
用户的家,当前用户具有最高管理权限的地方 /home/soft01(用户名)
终端=控制台=命令窗口
常用命令:
pwd:显示当前工作目录
ls:显示当前工作目录内容
cd:更改当前工作目录
cd /:跳入根目录
cd +目录首字母+(Alt+/):快捷方式进入内容目录
clear:清屏
cd ..:进入当前目录的上一层目录,也称为“父目录”“父文件夹”,“父路径”
cd ~:切换当前用户主目录。(cd = cd ~ = cd /home/soft01)
cd ./soft01:表示切换目录到当前目录到当前目录中的soft01
getid:启动一个文本编辑器
mkdir:使用mkdir命令创建一个demo01目录(格式:mkdir+空格+demo01(文件名))
touch:touch helloworld.java创建一个名为HelloWorld.java
绝对路径:
eg:/home/soft01 表示从根目录/开始的路径位置
cd /home/soft01
相对路径:
eg:home/soft01 表示从当前目录位置开始的路径位置day01 day01.txt MyEclipseGen.java
也就是相对于当前目录的目录
home/soft01只有在当前目录是“/”时候才成立!否则就不成立
JAVA编译运行过程
程序员编写的java源文件(.java)首先要经过编译,生成所谓字节码文件(.class);
java程序的运行需要JVM的支持,JVM(虚拟机)是一个软件,安装在操作系统中,为字节码文件提供运行环境:
.exc(可执行文件)
java官方提供了针对不同平台的JVM软件,这些JVM遵循着相同的标准,只要是标准的 .class文件,就可以在不同的JVM上运行,而且运行的效果相同,
这样,就实现了所谓“一次编译到处使用”
va虚拟
JDK :java Development(开发) Kit 【java开发工具包】
JRE :java Runtime Environment【java运行环境】
JVM :java Virtual Machines【java虚拟机】
运行一个java程序所需要的最小环境为JRE,开发一个java程序所需的最小环境为JDK。
JDK版本
win7
x86 32位版本 可安装32位版本的JDK (OS:操作系统)
x64 64位版本 可安装32位或者64位版本的JDK
安装Eclipse必须安装位数相应的JDK。
配置环境变量
右击“我的电脑”--属性--高级--环境变量--系统变量(下面一栏)
假设JAVA安装的位置是:C:\Program files\java\jdk1.7.0_05
设置环境变量
PATH=C:\Program files\java\jdk1.7.0_05\bin;
原有PATH的内容前面添加,千万不能删除原有内容
CLASSPATH的值一个.即可
JAVA_HOME的值是JDK的安装目录,(不是bin目录)
C:\Program files\java\jdk1.7.0_05
Eclipse安装顺序
1.安装JDK
2.配置环境变量PATH CLASSPATH JAVA_HOME
先配置环境变量
3.释放Eclipse.zip
4.可运行eclipse
打开MyEclipse
右上角 选择 --java
Window----Reset Perspective..
新建项目:File---new--JavaProject
1,计算机只能处理“数据”!
任何事物都需要作为数据交给计算机处理。
1】变量:变量就是存储数据的单元,是数据处理的载体。
2】java的变量必须声明后使用,声明时候必须给定明确数据类型
3】在使用之前,变量必须初始化,
4】变量的命名要符合语法规则
5】变量有建议的命名的规则:不能使用中文长变量名,驼峰命名法
6】变量在赋值的时候要保证值的兼容性,不兼容不能赋值。
2,变量命名要求:
1)首字:1,字母
2,下划线 "_"
3,“$”符号
2)其余部分:1,数字
2,字母
3,下划线,"_"
4,"$"符号
3)关键字不能作为变量名:java编程使用的表达语法的单词
eg:int byte
eg:goto const 保留未使用的关键字。字面量true false null不能作为变量。语言没有使用这两个单词,留下以后未来使用的单词
命名规范:见名知意。简短且能清楚的表明变量的作用,通常第一个单词的首字母大写,其后单词的首字母大写。
eg: String 隔壁老王=0; 不建议使用,但是完全符合语法!
3,变量三要素:
1,数据类型:变量的类型,决定变量空间的大小
2,变量名称:变量名,方便计算机找到这个变量
3,变量的值:存储的数据
4,变量的初始化有两种:
1,在声明变量(定义变量)时候直接初始化
int a=9;
2,先声明变量,在利用赋值语句初始化
int=b;
b=10;
eg:1)int a,b=10;//只对b进行了初始化
2)int sum;
sum=sum+10;//sum没有初始化,报错
java中直接给出的固定数值称为直接量,字面量就是给一个“常数”
//a是变量 100是直接量 字面量
5,Java中整数直接量的语法
1,整数直接量类型是int
2,整数直接量不能超过范围
3,0x开头是16进制
0~9 abcdef
4,0开头是8进制(很少用)
0~7
5,其他情况是10进制
eg:面试题
哪些直接量是合法的: A:80 B:081 C:ff D:0xFH 答案:(A)
long类型
在表示整数时,如果int类型的范围不够,可以使用long型一个long型的变量占用8个字节(64位),最大表示范围为-2^63~2^32-1
System.currentTimeMillis();方法
JDK提供System.currentTimeMillis();方法,1970年1月1日零点到现在所经历的毫秒数,常用于记时间,而1970年以前的用负数表示
long now=System.currentTimeMillis();
now/1000----1970到现在经历多少毫秒
浮点数直接量是double类型
通常写法:3.14,314.0,0.1
科学技数:1.25E2,1.25e2
如果需要精确的运算可以考虑放弃使用double和float而使用BigDecimal
char类型
以下三种位char类型赋值方式
1,字符直接量:eg:'A'
2,整形直接量,范围位0~65536
3,Unicode形式:'\u0041',Unicode字符的16进制形式
'0'-----48 57
'A'---65
'a'---97
转意字符:
'\n':表示回车符
'\r':换行
boolean类型
true和false是boolean类型的字面量,不是关键字
基本类型间转换
1,不同的基本类型直接可以互相转换
1,自动类型转换(隐式类型转换)|:从小类型到大类型
byte--short--int--long--float--double
char
2,强制转换,从大类型到小类型需要强制转换符
有可能造成精度损失或者溢出
byte short char int运算规则
1,int字面量在不超范围的时候,可以赋值给byte char short
byte b1=6;
byte b2=7;
byte b3=b1+b2;//报错,因为java按照int+int类型计算,得结果为int类型,int类型不能直接赋值给byte。
应调整优先级byte b3=(byte)(b1+b2);
byte bx=6+8;//编译通过。字面量运算按照结果作为字面量看待
byte bb=6*68;//报错,结果超过byte的范围,127~-128
导入项目步骤
1,解压项目包
2,打开MyEclipse-->File-->Import-->ExistingProjects into workspace-->Browse-->选择项目包-->finish
day03
1,运算符
1,使用 % 运算符:取余运算
一个数对3取余
1,负数结果 (-3,0]
2,正数结果 [0,3)
3,正数结果是周期型结果
*****在软件中周期性变化,常用余数运算处理。*****
2, ++ --自增(减)运算
1,i++:<==>i+=1<==>i=i+1 //先赋值 后自加 。int i=1;int b=i++; >>>>>>>b=1,i=2
2,++i:<==>i+=1<==>i=i+1 //先自加 后赋值 。int r=1;int b=++r; >>>>>>>b=2,r=2
2,逻辑运算
&& || !
同时为真true &&且 为真,否则就为假
同时为假false ||或 为假,否则就为真
关于“短路逻辑”问题
java逻辑运算遵循“短路逻辑”的原则
对于“&&”,当第一个操作数为false,将不会判断第二个操作数,无论第二个操作数为何,结果均为false
对于“||”,当第一个操作数为true时,将不会判断第二个操作数,无论第二个操作数为何,结果均为true
3,扫描仪
import java.util.Scanner;//引入扫描仪
Scanner cosols=new Scanner(System.in);//声明扫描仪
int a=cosols.nextInt();//使用扫描仪,将用户的数据赋值。
4,符合赋值运算
int b
int a=5+(b=6);
a+=5完全等价于a=(int)(a+5)
-= *= /= %= 均适用
符合赋值运算“表达式的值”是最后赋值的值
5,字符串连接运算
+ 加号在java中是两种完全不同的运算,但是使用了统一个运算符
1,当加号两端都是数时候执行数值加法
2,当加号两端中的任何一端是“字符串”时候执行字符串连接(“字符串”不是字符char)
int a=8
System.out.println('1'+a);//结果57.字符是unicode编码数值!
6,三木运算==三元运算
int rows =35;
int size=10;
int pages=rows%size==0?rows/size:rows/size+1;
【 判断是否成立 】【 成立 】【 不成立 】
String a=((year%4==0)&&(year%100!=0))||(year%400==0)?year+"是润年":year+"不是润年";
嵌套模式,取三个数中的最大值
int t=a>b?(a>c?a:c):(b>c?b:c);
7,if语句
if(逻辑表达式){ 逻辑表达式为真,执行if里面的语句
语句1;
语句2
}
1,字符串
计算机计算原理
char c=65;
String s1=Character.toString(c);//字符在输出的时候自动调用Character.toString()方法 字符数据49,转换为“1”
System.out.println(s1);//A
String s2=Integer.toString(c);//整数在输出的时候自动调用Integer.toString()方法
System.out.println(s2);//65
2,分支语句使用原则
1,一个条件决定是否执行一个代码块,
if(条件){语句}
2,一个条件,两个选择,
1)if(条件){true语句}else{false语句}
2)三元运算 a>b?a:b;
String a=((year%4==0)&&(year%100!=0))||(year%400==0)?year+"是润年":year+"不是润年";
3,多路选择
1)if....else if...语句
if(条件1){
语句1
}else if(条件2){
语句2
else if(条件3){
语句3
}else{
语句4
}
2)switch case 语句。使用分支条件是“整数”.注意case default后面为:分号
switch(case){
case 0:
case 1:
println(a);
break;
case 2:
println(b);
break;
case 1:
println(c);
break;
default:
println(d)
}
3,排序问题
从小到大
如果a>b,进行数据交换
中间量t开头,首位相连 t=a;a=b;b=t;
4,循环语句
循环的两个要素
循环体:循环语句中重复执行的语句块
循环条件:循环执行过程的结束(退出)条件
1,while循环:在性能换体开始位置检测循环条件的循环。
1,一般情况下循环处理和次数无关
2,循环条件在循环体开始位置进行检查
true执行语句,false跳出while循环
while(boolean语句){
true语句
}
false语句
while(true){}死循环,中用break跳出结束死循环
2,do-while循环结构:boolean结果为true再次执行循环
do{
语句块
}while(boolean表达式)
int pwd ;
do{
System.out.print(“请输入密码”);
pwd = scanner.nextInt();
} while ( 123 != pwd) ;
使用break语句跳出循环
break用在循环体中用于打断循环
1,可以利用死循环+break代替do while
2,如果循环结束条件在循环体中部出现,使用死循环+break解决
continue:
continue语句只能用于循环中,它的作用为跳过循环体中剩余语句而执行下一次循环
随机数 Random
double n=Math.random() n=[0,1) (int)(n*100)=[0,100) (int)(n*100)+1=[1,101)
此方法支持多线程
Random ran=new Random()
int num=ran.nextInr(10);//0~9
Math.sqrt(n);取n的平方根
整形数据输入:in.nextInt();来接收
双精度小数输入:in.nextDouble();来接收
字符串输入:in.next();来接收
一串字符据输入:in.nextLine();来接收
in.nextLine().toUpperCase();此方法可将控制台接收的字符串转换为大写字母
day05
1,for循环
for(表达式1;表达式2;表达式3){
语句块循环体
}
计算表达式1的值,通常为循环变量赋初值;
计算表达式2(表达式2为逻辑表达式)的值,即判断循环条件是否为真,若值为真则执行循环体一次(语句块),否则跳出循环;
执行循环体;
计算表达式3的值,此处通常写更新循环变量的赋值表达式;
计算表达式2的值,若值为true则执行循环体,否则跳出循环;
如此循环往复,直到表达式2的值为false。
for循环变量经常用i,j,k,. i=index
for循环经典用法
for(int i=0;i<10;i++){}//i=0 1 2....9
for(int i=0;i<10;i+=2){}//i=0 2 4 6 8
for(int i=1;i<10;i+=2){}//i=1 3 5 7 9
for(int i=10;i>=0;i--){}//i=10 9 8 7....0
for特殊用法
int i = 1;
for ( ; i <= 10 ; i + + ) {}
for ( int i = 1 ; i <= 10 ; ) {i++}
for ( ; ; ) {}
break用法
使用范围:可用于循环语句或者switch语句中
作用:是程序终止循环而执行循环后面的语句
continue用法
使用范围:只能用于循环语句中
作用:用于打断此次循环进入下一次循环
以下代码正确
public static void main(String[] args) {
for(int i=0,j=0,k=0;i<10&&j<4&&k<10;j+=2){
System.out.println(i++);
System.out.println(++k+i);
}
}
2,数组:是一种最基本的数据结构
程序=数据+算法
数组:相同数据类型的元素组成的集合
1,语法:
声明数组,并指定数组容量大小
声明 初始化
Aint[] arr=new int[10]
int arr[];//等价于int[] arr,建议用此种方法
arr=new int[10];
声明数组,并赋值
Bint[] arr={1,2,3,4,5,6,7,8};//大括号部分只能在声明变量直接初始化
Cint[] arr
arr=new int[]{1,2,3,4,5,6,7,8}//注意不可直接arr={1,2,....},需加new
C int[] arr=new int[]{1,2,3,4,5,6,7,8}//没有长度,实际长度就是元素的个数
总结:三种元素初始化方式
A, new int[长度]
B, {元素1,元素2}
C, new int[]{元素1,元素2}
如果创建长度很长的数组用A
如果事先已知元素,数量不是很大使用B
因为B值只能用在声明变量初始化,在B不适合用的场合使用C
数组长度:arr.length
数组下标最大值为数组长度减1
数组复制:已存在的两个数组之间惊醒元素的复制
System.arraycopy()方法可实现数组的复制
public static void arraycopy(Object src, int srcPos,Object dest,int dextPos,int length)
int[] a={111,222,333,444}
int[] a1=new int[6]
System.arraycopy( a, 1, a1, 0, 4)
从数组a的第2位数 到数组a1第一位开使赋值4个元素
数组的复制
java.util.Arrays类从copyOf方法可实现数组的复制
特点:生成新数组是原数组的副本
newLength小于原数组,则进行截取
newLength大于员素组,则用0或者null进行填充
int[] a={10,20,31,40,50};
int[] a1=Array.copyOf(a,6);
新数组a1={10,20,30,40,50,0}
数组的扩容(替换,原数组被丢弃)
int[] a={10,20,31,40,50};
a=Array.copyOf(a.a.length+2);
新数组a={10,20,30,40,50,0,0}
System.out.println(Arrays.toString(arr));输出数组arr
day06
数组的排序
冒泡排序
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
********Arrays.sort(arr);//调用系统API排序算法。升序。方法封装了*****
如何将数组打乱,洗牌算法。
for(int i=(arr.length-1);i>=1;i--){
j=(int)(Math.random()*i);
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
方法:
方法用于封装一段特定的逻辑功能
方法可以在程序中反复被调用
方法可减少代码重复,便于程序的维护
修饰词
public static int sum (int num1,int num2){ //方法体}
返回值类型 方法名 参数列表
方法只能定义在类中
不能定义在方法中
不能定义在类的外部
方法中不能定义方法
如果方法声明了返回值,就一定使用return语句返回和int类型兼容数据
方法中可有多个return语句,方法执行到某个return语句时候结束
一般情况下方法不会执行两个return语句
方法的主要三要素:方法名,参数列表,返回值
方法名:一般按照方法实现的功能定名
参数列表:是方法的前提条件,是方法执行依据,是数据
方法返回值:功能执行的结果,方法必须定义放回值,并且方法中,必须使用return语句返回数据,如果无返回值则定义为void此时return语句可写可不屑,返回结果
只能有一个,若返回多个结果,要用数组返回。
局部变量:在方法中声明的变量称为局部变量。
注意:1,变量的作用域:局部变量,和方法参数的作用域都是在当前语句块有效,离开语句块就消费(从栈中清除)
2,不同作用域的变量,即使重名也不是同一个变量
无返回值 无参数方法
public static void sayHello(){
System.out.println("Hi,你好!");
}
调用方法:在main方法中输入sayHello();调用
void 表示方法无返回值,()表示无参数方法,
定义方法时候:无参数方法必须使用()
无返回值必须:使用void
有参数返回
public static void sayHelloTo(String somebody){
System.out.println(somebody+"你好!");
}
调用方法:在main方法中用sayHelloTo(“老王”);调用。
为啥要定义方法:
1,封装一个可以“重复”的计算模块
2,当软件中出现一个独立的功能模块时候就将他封装为方法。
当一段代码能完成一个功能的时候,可以将其封装为方法
功能:就是能够用一个“动词”描述的代码块
方法=动词
3,优点:可以使代码模块化,功能化
提高维护性(可读性) 工程化
4,如何实现方法
in.nextLine().toUpperCase();此方法可将控制台接收的字符串转换为大写字母
equals用于比较字符串是否一样
input=in.toCharArray();//将字符串in中的字符转换为char数组。“ABCDE”-->char[]{A,B,C,D,E}
随机生成不重复的字母
设计数据:
1)随机生成i=[0,26)
2)检查used[i]是否是true,也就是字符是否被用过
3)如果用过返回1)
4)i一定是没有使用过的
answer[index]=chs[i]
index++;
used[i]=true;
index==5时满了结束
5)返回1)
char[] chs={'A','B','C','D','E','F','G','H','I'}
boolean[] used={ F, F, F, F, F, F, F, F, F,}
//used用过=假,表示26个字母都是没有被使用过的,如果抽取出以后改成true就表示这个字母用过了
char[] answer={B,H,D}
//设计数据,i表示抽取位置=[0,26),
index=0表示answer的填充位置,不断加1,
二进制基础
计算机科学之父:图灵
二进制基础(8, 4, 2, 1)
1,什么是二进制
便宜,制造成本便宜
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
*******************在计算机中只有二进制*************
2,为啥要使用2进制
3,2进制在哪里
4,进制的计算规则
补码:最便宜的方式实现了负数计算。
补码优点:在范围内据算没问题
补码缺点:不能超范围计算
5,2进制计算在开发中的应用
(2048 1024 512 256, 128 64 32 16 ,8 4 2 1)
550 0010 0010 0110
int中最大的2进制数0111 1111 1111 1111 1111 1111 1111 1111
int中最小的2进制数1000 0000 0000 0000 0000 0000 0000 0000
2进制
1,数字0,1
2,规则逢2进1
3,权128 64 32 ,16 8 4 2 1
2 的幂
10进制
数字 0 1 2 3 4 5 6 7 8 9
规则:逢10 进1
权:1000 100 10 1
10的幂
16进制:
是2进制的简写
将每4位2进制简写为一个16进制数
逢16进1
数字:“0~9 a~f”
权 256 16 1
41(16)=4*16+1=65(10)
4a(16)=4*16+10=74(10)
int i=0xffffffff; //-1
计算机颜色
R G B
8位数 8位数 8位数
白 11111111 11111111 11111111
ff ff ff
int color=0xffffffff;表示白色
int color=0xff000000;红色
int color=0xffff00;
int max=Integer.MAX_VALUE;
int min=Integer.MIN_VALUE;
System.out.println(Integer.toBinaryString(max));//0111 1111 1111 1111 1111 1111 1111 1111
System.out.println(Integer.toBinaryString(min));//1000 0000 0000 0000 0000 0000 0000 0000
int r=255/2;
System.out.println(r);//10进制 127
System.out.println(Integer.toBinaryString(r));//二进制 1111111
System.out.println(Integer.toHexString(r));//16进制 7f
(50%的红)r=127(10) 01111111(2) 7f(16)
c=01111111 00000000 00000000
c=0x7f 00 00
255/2 = 01111111(2)
255/2<<16 =01111111 00000000 00000000
255/2<<8 = 01111111 00000000
255/2 = 01111111
-----------------------------------------------------------
01111111 011111111 01111111
将3个8位数拼接为一个24位的通用算法
r=255/2
g=255/2
b=255/2
color =(
将4个8位数拼接为一个32位的通用算法
b1
b2
b3
b4
int i=(b1<<24)+(b2<<16)+(b3<<8)+b4
为了整理数据:
32位数据int a
a拆分为4个8位数据--传送-> 接收放:将4个8位数拼接为int数据
<<:左移位运算:经典的将byte数据合并
>>:右移位运算:将int,long等数据进行拆分
计算机中数据管理单位是8位byte 文件IO都是8位为单元的处理
电脑~~>硬盘:将数据拆分为byte数据才能写到文件:称为“序列化” 将String拆分为byte数据才能写到文件,称为“编码”
硬盘~~>电脑:将数据byte合并为我们需要的数据,称为 反“序列化” 将数据byte合并为我们需要的String,称为 “解码”
字符串的编码和解码有API完成
编码方式:称为编码方案,有很多种。eg:GBK,GB2312 UTF-8,UTF-16BE...
编码规则和解码规则必须要一致,否则乱码
文字编码规则
GBK编码规则
A,变长编码1~2字节
英文1字节,中文2字节
eg:“ABC中国”->{byte*7}
B,支持的文字数量:中文+英文20000+
C,中国本地最优编码
UTF-8编码规则
A变长编码1~4字节
英文1字节,中文3字节
eg:“ABC中国”->{byte*9}
B,支持文字数量:100000+
英文 中 日 韩 希伯来 阿拉伯......等地球上所有的
C,国际化最优编码
解码:byte*n-->String
乱码:编码和解码时候的“编码方案”不一致
进制转换(2048 1024 512 256, 128 64 32 16 ,8 4 2 1)
2进制到 10进制
0010 0110 2^5+2^2+2^1=64+4+2=70
10进制到 2进制
70 70-64=8 8-6=2 2-2=0 找64,6,2所在2进制权的位置 0010 0110
2进制到 16进制(8 4 2 1) 4位2进制可以缩写为一个16进制
0010 0110 1101 (2)
2 6 e (16)
总结:
1,计算机内部只有2进制
2,2进制可以计数
3,补码:完成负数计算的
优点:能够处理负数问题,满足数字计算规则
缺点:有溢出计算问题,使用更大范围的补码,避免溢出问题
4,计算机利用API()算法解决人类使用10进制,计算机使用2进制
Integer.parseInt()将10进制字符串转2进制
Intege.toString()将2进制转换为10进制字符串输出
5,如何直接书写2进制:使用16进制
16进制是2进制的缩写(简写)形式,规则:4位2进制可以缩写为一个16进制
是计算机专业人员书写2进制的方法习惯,
eg:计算机颜色处理,2进制处理 常用16进制形式书写颜色值 red=0xff0000
6,2进制的计算:进行数据的拆分和合并的计算
int red=255/2,green=255/2,blue=255/2;
int color =(red<<16)+(green<<8)+blue;
new Color(cor);
new Color(red,green,blue);
7,何时使用数据的拆分和合并
将数据写出到文件时(互联网,硬盘),要拆分。称为“序列化”
从文件(互联网,硬盘)读取数据需要合并。称为反“序列化”
String的拆分(序列化)称为“编码”,String的合并称为“解码”。
编码,解码的方式称为“编码方案”,eg:GBK,GB2312 UTF-8,UTF-16BE...