计算机常量
常量的定义:
本身不可再改变的量叫做常量
常见的几个常量类型:
整数常量:
所有的整数 3,4,100。
小数常量:
所有的小数 1.02,5.36,8.7209。
1.2.3字符常量:将一个符号用 ‘ ’ 标志起来就构成一个字符常量 ‘a’ ‘+’ ‘1’ ‘ ’ 。
1.2.4字符串常量:将多个字符用 “ ”标志起来就构成了一个字符串常量 “abc” “12w”
1.2.5布尔常量:只有两个值---true/false---用于表示逻辑值
1.2.6空常量:null
进制及其转换
二进制:
用0-1来表示一个数,满2进1 ,在JDK1.7以前Java代码中不允许直 接表示二进制数字,从jdk1.7开始允许在代码中使用二进制数字,要求以0b/0B开头, 例如:1+1=10 11+1=100 0b100100 0B10111
八进制:
用0-7来表示一个数,满8进1 ,以0开头标志八进制数字 07+01=10 016+01=017 017+01=20 015 07 012 027
十进制:
用0-9来表示一个数,满10进1
十六进制:
0-9,A-F/a-f,满16进1 以0x/0X开头标志十六进制数字 9+1=a a+1=b f+1=10 0x23 0xa 19+1=1a 1f+1=20
十进制转换成二进制:
不断地除以2取余数,将余数倒排
二进制转化成十进制:
从低位次开始,每一位乘以2的位次之幂,然后将积求和
十进制转化为其他进制:
就是除以对应的进制然后取余倒排
其他进制转化为十进制:
乘以对应进制的位次次幂然后求和(参照二级制来做)
二进制转换成八进制:
从低位次开始,每三位化为一组,产生一个八进制数字,最 高位如果不足三位,则补0---三变一
八进制转换为二进制:
一变三(将八进制每一位都用三位二进制数来表示)
二进制转化为十六进制:
四变一
十六进制转化为二进制:
一变四(将十六进制每一位都用四位二进制数来表示)
变量
变量的定义:
我们在类中定义的用来存储数据的可以改变的量。
定义格式:
注意:变量名是不可以重复的。
数据类型及其转换
基本数据类型
整数型:
byte---字节型---占1个字节 --- 表示范围是-27~27-1 - -128~127
byteb = 25; byte b2 = 128;---false(超出范围)
short---短整型---占2个字节 --- 表示范围是-215~215-1 --- -32768~32767
shorts = 3; short s = -109;---几乎不用
int---整型---占4个字节--- 表示范围是-231~231-1 --- 2.1*1010~2.1*1010---整数默认为 int类型System.out.println(6); int i = 129;从JDK1.7开始int j = 3_186_485_318; ->编译 完成之后就是int j = 3186485318;
long---长整型---占8个字节---表示范围 -263~263-1 --- -9*1018~9*1018---后边添加L/l标志是一个长整型:long l = 31864853188L;
浮点型:
float---单精度---占4个字节 ---表示范围 -1038~1038---要求必须以F/f标志float类型 的数字,float f = 3.23f;
double---双精度---占8个字节--- 表示范围-10308~10308 ---小数默认为double
System.out.println(3.4); double d = 4.2; double d2 = 5.6D; double d3 = 6.01d;
字符型:
char---字符型---占2个字节--- 0~216_1 --- 0~65535
char a= ’a’; char b=’中’;(对于中文而言,采用gbk编码,一个汉字占两个字节,用 utf-8,占用三个字节。)
转义字符:‘\t’ ---table 制表符 ‘\r’---return 回车 ‘\n’---next/newLine换行
‘\\’ ---\ ‘\’’ --- 单引号 ‘\”’ --- 双引号
布尔类型:
boolean ---布尔型---只能表示true/false---内存大小根据jdk版本和操作系统来确定
booleanb = true;
引用数据类型:
数组、类、接口。
数据类型的转换:
自动类型转换/隐式转换:
规律一:小的类型可以自动转化为大的类型
byte--->short--->int--->long
float--->double
规律二:整数能够自动转化为小数,但是会产生精度损失
规律三:字符可以转化成整数
强制类型转换:
double d=3; int a =(int)d;
Int a=5;byte b= (int)a;
注意,小数类型转化为整数的时候,小数部分会舍掉。
数据的原反补三码
任意一个数据都有原码、反码、补码这么三种形式。
数据在计算机中是以补码形式来存储的,因此实际上计算的也是数据的补码。
对于正数,原反补三码一致。
inti = 5;
原码:0000000000000000 00000000 00000101
反码:0000000000000000 00000000 00000101
补码:0000000000000000 00000000 00000101
对于负数,反码是在原码的基础上最高位不变,其余位1变0,0变1;
补码在反码的基础上+1
注意:最高位是符号位,0表示正数,1表示负数
inti = -3;
原码:1000000000000000 00000000 00000011
反码:1111111111111111 11111111 11111100
补码:1111111111111111 11111111 11111101
算术运算符
常用运算符:+- * / % ++ --
关于+- * /:
byte/short/char在运算的时候会自动的提升为int类型
整数运算完成之后的结果一定是整数
当小类型和大类型一起运算的时候结果一定是大的类型
byte b = 4 + 1; --- 4 和1都是常量,值确定,所以在编译的时候进行优化,编 译完成之后结果就是byte b = 5;
整数/0 -- ArithmeticException---算术异常 任意一个非零小数/0;任意一个非 零数字/0.0---Infinity 0.0/0 ,0/0.0 ,0.0/0.0---NaN---Not a Number---非数字
关于%
% 取模---取余
7%3=1 2%5=2
-18%-5=-3 --- 对于负数的取余,先忽略符号按照正数取余来运算,运算完成之后看% 左边数字的符号,如果左边为正,结果为正,左边为负,结果为负。
注意:小数无法精确运算,绝大部分小数在内存中无法精确存储。
关于++/-- :自增/自减
如果++/--在前,先自增/自减然后参与后续运算
如果++/--在后,先将值取出来参与后续运算然后再自增/自减
inti = 5;
int j = ++i; -> 先将i自增为6,然后将6赋值给j,所以j的值也是6;
inti = 5;
int j = i++;-> 先将i的值5取出来,然后i自增为6,最后将5赋值给j
inti = 3;
int j = ++i + 1; -> 先将i自增为4,然后将i的值4取出来参与+1,最后将4+1赋值 给j,所以j的值为5
inti =3;
int j = i++ + 1; -> 先将i的值3取出来参与+1运算,i再自增为4,然后将3+1的值 赋值给j,所以j的值是4
注意:byte/short/char类型也可以参与++/--,结果依然是原来的类型,是在底层做了 强制类型的转换。
赋值运算符
常见的赋值运算符:= += -= *= /= %= &= |= ^= <<= >>= >>>=
运算规则:
inti = 8;
i +=2; -> i = i + 2; -> i = 10
inti = 6;
i -=4; -> i = 2;
注意:
除了=以外,其余的符号要求变量必须先有值才能使用
byte/short/char可以参与赋值运算
inti = 5;
i +=i -= i*= i++; -> i=-15
i =5 + ( 5 - (5 * 5));
inti = 5;
i = i++; ---先将i的值5取出来,然后i自增为6,最后将5赋值给i -> i = 5。
关系运算符
常见关系运算符:==等于 !=不等 > < >= <=
关系运算符的使用:
3 ==4 --false
3 !=4 --true
instanceof --- 关键字 --- 判断对象和类的关系的---不能判断基本类型
System.out.println(“abc” instanceof String); --- true
逻辑运算符
常见的逻辑运算符:
&与---And ,|或---Or ,!非---Not, ^异或---Xor, &&--短路与, ||--短路或
逻辑运算符的使用:
true&true=true, true&false=false ,false&true=false ,false&false=false(同为true,结 果才为true)
true|true=true, true|false=true ,false|true=true ,false|false=false(有一个为true, 结果就为true)
!true=false ,!false=true(!非,取反)
true^true=false, true^false=true ,false^true=true ,false^false==false(两个不同为true)
&&:如果&&左边的结果为false,那么&&右边的表达式就不再运算---短路
||:如果||左边的结果为true,那么||右边的表达式就不再运算
注意:||可以把&&短路掉,但是&&不能把||短路掉。