存储原理
文本文件:也叫源文件,给别人看的
二进制文件:给计算机看的二进制编码
数据要运算,必须要先存储
存储方式:
1.内存:两端无线延伸的线
2.硬盘:螺旋线
存储单位:
bit:最小的电子位,比特,统称位
byte:一个字节=8bit
short:短整型=16bit
int:整型=332bit
long:长整型=64bit
负数表示方式:最高位作为符号位,1表示负数,0表示正数.负数为正数补码的反码,也就是补码+1
反码就是原码取反,1.0互换,首位符号位不变,再java里,一个字节存储的范围为-128~127,n位为-2^(n-1)~2^(n-1)-1
数据类型的分类
本质:规定占用内存空间的大小,用位和字节表示
有时候为了方便转换数据类型会使用ASCII码来代替字符,常用的有
A:65 a:97 0:48
数据类型使用
1.整型
单指在Java中,不能直接表示二进制
十进制:int i = 10;
八进制:int i = 011;
十六进制:int i = 0x11;
2.浮点型
float:32bit
double:64bit(Java中默认的小数是double)
3.字符型
char:16bit,用单引号表示,常采用unicode编码,0~65535,字符不需要负数
4.转移符:把有意义的符转换为无意义字符,java中使用\进行转义
5.布尔型boolean:true/false,适用于流程控制,不参与任何类型转换,占用1字节,8bit.全是0表示false,0000 0001表示true
左边图像输出自然是 是真的
6.类型转换
八种基本数据类型中,除了布尔类型都可以任意转换
自动类型转换:低精度到高精度
强制类型转换:高精度到低精度(有可能损失精度)
低精度类型 = (低精度类型)高精度值
7.混合运算
变量
常量/字面量:整个生命周期中值不可更改
字面量:直接写,不声明空间存储
常量:final声明,值不可更改
.常量的分类:
字符串常量:凡是用双引号引起来的部分,叫做字符串常量。例如:“abc”、“12”.
整数常量:直接写上的数字,没有小数点。例如:100。
浮点数常量:直接写上的数字,有小数点。例如:-2.5。
字符常量:凡是用单引号引起来的单个字符,叫做字符常量。例如:‘a’、‘中’。
布尔常量:只有两种取值。true、false。
空常量:null。代表没有任何数据。
变量:可以更改的数据,有名字的内存空间,可以复用该内存空间
变量声明:数据类型 变量名 = 值;
int i = 10;
同时声明多个变量:int a,b,c;并不赋值
int a=1,b=2,c=3;声明并赋值
全局变量
变量分类
变量调用
默认值
优先级
运算符
算术运算符
关系运算符
位运算符 && || !
“&&”表示 与,意为同时都要满足。
“||”表示 或,意为二者或多着只要满足其中一个
A ? B:C ,意思就是如果A为真执行B,否则执行C
A != B?c:d,意思事如果A不等于B,那么执行C,否则就执行D,,boolean类型,?前判断,如果为true,执行第一个,不执行第二个,如果为false,那么执行第二个
~ : 按位非, 比如 0 的二进制 00000000 , ~0之后 ,就是 11111111 这是补码, 11111110 这是反码, 10000001 这是原码
>> : 右移运算(考虑符号位,就是再怎么移位,符号位不受影响)
8 >> 2 = 2
8 的二进制为 0000 1000,右移两次, 就删除最右边两位,并再最左边补两个0(符号位之后)
8 >> n = 8 / 2^n
如果是负数 就补1 , 正数 补0
-8 : 1000 1000 1111 0111 1111 1000
-8 >> 1 : 1111 1100
1111 1011 1000 0100
-8 >> 2 : 111111 10 1111 1101 1000 0010
-8 >> 4 : 1111 1111 1111 1110 1000 0001
负数 右移之后 最小值 也是-1 , 正数 右移之后 最小值是 0
右移 1次 就等于 / 2
<< : 左移运算(考虑符号位,就是再怎么移位,符号位不受影响)
删左边,补右边补0
2 << 2 : 0 0 001000 = 8
-2 << 2 : 1111 1000 1111 0111 1000 1000
8 << n = 8*2^n
>>> : 右移运算(不考虑符号位),只向最左边补0
正数 和 >> 一样,因为补0 , 正数符号位 就是0
但是负数就不一样了,因为负数 首位是1,如果补0之后,就成正数了
1073741822
-8 : 1000 0000 0000 0000 0000 0000 0000 1000
-8 : 1111 1111 1111 1111 1111 1111 1111 0111
-8 : 001111 1111 1111 1111 1111 1111 1111 10
-1 >>> 1
01111 1111 1111 1111 1111 1111 1111 111 = 2147483647
JAVA面试题:请问如何可以更快的计算出2的3次方
2<<2