day03进制、变量
day03进制、变量
一、进制
-
定义:计数时进位的机制
-
日常常见的进制
-
十进制
满十进一
组成:0,1,2,3,4,5,6,7,8,9
特点:
9+1=10 19+1=20 99+1=100 -
二进制
满二进一
组成:0,1
特点:
1+1=10 11+1=100标识:在JDK1.7开始,允许程序中以ob或者OB开头标识一个二进制的数
-
八进制
满八进一
组成:0,1,2,3,4,5,6,7
特点:
7+1=10 17+1=20 77+1=100标识:在程序中需要以0开头标识一个八进制的数字,所以八进制应写为07,05,015
-
十六进制
满十六进一
组成:0-9 a-f(A-F)0 1 2 3 4 5 6 7 8 9 A B C D E F
特点:
9+1=a a+1=b F+1=10 2F+1=30 99+1=9A 9F+1=A0 FF+1=100标识:在程序中需要以ox或者OX开头标识一个十六进制的数,所以十六进制应写为ox2 ox3A oxF5A
-
-
进制之间的转换
- 十进制数据转成二进制数据:使用除二倒取余的方式
- 二进制数据转成十进制数据:从这个二进制数字的低位次开始,按照位次乘以2的位次次幂,然后将这些幂求和
- 二进制转换八进制:从这个二进制数字的低次位,每三个划为一组,每一组产生一个八进制数字,如果最高位不足三位,则补0,所以二进制向八进制转换是一个三位变一位的过程
- 八进制转换二进制:每一位八进制数字产生三位二进制数字,如果产生的二进制数组不足三位补0
- 二进制转换十六进制:二进制转换为十六进制的过程和二进制转换为八进制的过程有些类似,是从低位次开始,每4位二进制数字分为一组产生一个十六进制的数字,同,最高位不足四位补0
- 十六进制转换二进制:十六进制转化为二进制的过程和八进制转换为二进制的过程有些类似,也是从低位次开始,每一位十六进制的数字产生四位二进制的数字,同样,如果产生的数字不足4位需要补0
(进制转换图之后补)
二、原码、反码、补码
- 疑问:
在计算机中,实际上默认是以32位的二进制来存储一个整数
为了表述负数:规定正数的最高位为0,负数的最高位为1
如:
18:00000000 00000000 00000000 00010010 -9:10000000 00000000 00000000 00001001 5: 00000000 00000000 00000000 00000101 -5:10000000 00000000 00000000 00000101 5+(-5)=-10? 5: 00000000 00000000 00000000 00000101 -5:10000000 00000000 00000000 00000101 和:10000000 00000000 00000000 00001010-
原码,反码,补码
-
在计算机中,数据是以二进制形式来存储的,任意的数据在计算机中都存在三种形式:原码,反码,补码。
-
原码是可以直接计算出来的二进制数据其中二进制的最高位是符号位,如果最高位是0,表示该值是一个正数,如果最高位是1,则表示该数字是负数。
-
正数:原码,反码,补码是一样的
18
原码:00000000 00000000 00000000 00010010 反码:00000000 00000000 00000000 00010010 补码:00000000 00000000 00000000 00010010 -
负数
对于负数而言,直接计算出来的是它的原码,反码是在原码的基础上保持最高位不变,其他的位置上的0变1,1变0,补码是在反码的基础上+1
-9
原码:10000000 00000000 00000000 00001001 反码:11111111 11111111 11111111 11110110 补码:11111111 11111111 11111111 11110111计算机在存储的时候存的是数据的补码,对数据计算,算的也是数据的补码
5
原码:00000000 00000000 00000000 00000101 反码:00000000 00000000 00000000 00000101 补码:00000000 00000000 00000000 00000101-5
原码:10000000 00000000 00000000 00000101 反码:11111111 11111111 11111111 11111010 补码:11111111 11111111 11111111 111110115+(-5)
5的补码: 00000000 00000000 00000000 00000101 -5的补码:11111111 11111111 11111111 11111011 5+(-5)=100000000 00000000 00000000 00000000(计算出的结果是33位) 结果: 00000000 00000000 00000000 00000000 整数类型,计算机默认从低位次开始存,存32位,如果超过32位高位舍弃练习:
-8
原码:10000000 00000000 00000000 00001000 反码:11111111 11111111 11111111 11110111 补码:11111111 11111111 11111111 11111000给出一个补码:
补码:11111111 11111111 11111111 11010111计算其存储的数值是多少?
先计算反码(补码-1),再计算原码 补码:11111111 11111111 11111111 11010111 反码:11111111 11111111 11111111 11010110 原码:10000000 00000000 00000000 00101001 转化为十进制:-(1+8+32)=-41
-
三、内存单位
-
字节(Byte):是计算机中的一种计量单位,一字节等于八位。
-
位(Bit):是数据存储的最小单位。也就是二进制。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8bit就称为一个字节(Byte)。
-
常用的内存转换
字节: 1Byte=8bit
千字节:1KB=1024Byte
兆字节:1MB=1024KB
吉字节:1GB=1024MB
太字节:1TB=1024GB
四、变量和数据类型
-
变量
- 概念:在程序执行的过程中,其值可以发生改变
- 本质:是一个内存空间的表示
- 作用:存储数据的
- 概括:变量就是内存中的一块用于存储数据的空间,其值在程序运行过程中可以改变。
-
变量三要素:
- 变量名称
- 变量的值
- 变量的类型
-
变量声明
int a;//声明了一个整数类型的变量,变量名是a int b,c,d;//声明了三个整数类型的变量,变量名分别是b,c,d -
变量的命名规则
- 只能包含字母,数字,_和$,并且不能以数字开头,中间不能有空格
- 严格区分大小写
- 不能使用关键字,可以包含关键字
- 允许使用中文,但是不建议,建议“英文单词见名知意”,遵循小驼峰命名规则
-
变量的声明及使用
-
初始化:第一次赋值
-
声明的同时初始化
//2.1 声明的同时并初始化 //2.1.1声明一个整型变量,变量名为a //2.1.2给a赋值为5 int a = 5; -
先声明,后初始化
int b,c,d; //声明三个整型变量,变量名分别为b,c,d b = 10; //给b赋值为10 c = 20; //给c赋值为20 d = 30; //给d赋值为30 -
对变量进行操作,实际上是对它所存的那个数据进行操作的
int e = a + 10; // 取出变量a中的数据5,用5和10相加,把结果赋值给整型变量e System.out.println("e=" + e); //输出e的值15 System.out.println("e"); //双引号中的内容原样输出 System.out.println(e); //变量e,输出的是变量e中存储的值 15 -
变量的操作必须类型匹配
/* 代码下方有红色波浪线,表示报错 此处表示编译错误, 执行 javac VariableTest.java 命令的时候报错 */ int pi = 3.1415926; //编译不通过,类型不匹配 -
变量值使用之前,必须声明并初始化
System.out.println(m); //变量未声明 int m; System.out.println(m); //变量未初始化 -
基本数据类型
八种基本数据类型:
byte short int long float double boolean char
四类八种
-
整数型
-
byte: 字节 1个字节 8位 范围-128~127之间 -27~27-1
-
short:短整型 2个字节 16位 范围-32768~32767 -215~215-1
-
int: 整型 4个字节 32位 范围-21亿多到21亿多 -231~231-1
-
整数直接量默认就是int类型,但是不能超出范围,如果超出范围则编译错误
-
两个整数相除,结果还是整数,小数位无条件舍弃(不会四舍五入)
-
运算时如果超出范围,则会发生溢出,溢出不是错,但是要避免
-
从JDK1.7开始,允许在数字中以间隔,在编译的时候会直接省略掉
如:int i = 21_4748_3647
-
-
long:长整型 8个字节 64位,-900万万亿~900万万亿 -263~263-1
- 表示长整型直接量,在直接量末尾加L或者l
- 运算时如果有可能溢出,建议在第一个数字后面加L
- System.currentTimeMillis();返回一个Long值,指的是1970年1月1日0时到此时此刻系统时间的毫秒数
-
-
浮点类型
-
float:单精度浮点类型 4字节 大概范围-10^38~ 10^38
在Java中float类型的数据需要在末尾添加f/F
float虽然占4个字节,但是它比long的8个字节范围还要大,因为小数的存储用到了科学计数法
-
double:双精度,8字节,很大很大
小数直接量默认都是double类型,如果想要表示float需要在直接量结尾加F/f
不能表示精确的数据,运算时可能会发生舍入误差,需要精确计算的场合不适用
如:0.1+0.2结果不是0.3
-
-
字符类型
-
char:字符型,2字节,0~2^32-1 0~65535
字符型直接量必须放在单引号中,只能有一个字符
采用的是Unicode编码格式,一个字符就是一个编码
我们看到的字符char本质上就是int(0到65535),需要记住几个特殊的ASCII码
‘a'-97
'A'-65
'0'-48
-
-
布尔类型
boolean只有两个取值:true,false,1个字节
-
-
五、码表
-
按照一定的规则,将字符映射成数字,这个映射过程就是编码的过程,记录这个映射的表格就是码表
-
世界范围内常见的码表
-
ASCII:只包含,字母,数字,标点符号,特殊字符等127个字符
-
西欧码表:ISO-8859-1 一个字符对应一个字节
-
中国码表:GBK
- gb2312 只支持简体中文,中国大陆
- BIG5 只支持繁体中文 台湾
- GBK,在gb2312基础上做出的扩展,兼容gb2312的
- GB18030:兼容GBK,包含日文,朝鲜文,韩语等
-
Unicode万国码 统一码联盟推出的
Unicode一套编码体系,UTF-8 UTF-16 UTF-32
-
-
因为ISO-8859-1出现的比较早,所以要求所有码表都兼容ISO-8859-1
-
对于中文的存储
- UTF-8是以3个字节存储一个汉字的。
- GBK是以2个字节存储一个汉字的。
-
浙公网安备 33010602011771号