Java语言基础
计算机底层运算是用补码进行运算,呈现出来的结果是原码。
一个数据的二进制表现形式:最高位作为符号位,‘0’表示整数,‘1’表示负数,,其余位是数值位
+5 | 符号位 | 数值位 | -5 | 符号位 | 数值位 |
原码 | 0 | 0000101 | 原码 | 1 | 0000101 |
反码 | 0 | 0000101 | 反码 | 1 | 1111010 |
补码 | 0 | 0000101 | 补码 | 1 | 1111011 |
整数的原码,反码,补码都一样。
负数的反码是在原码上符号位不变,数值位取反:1变0,0变1;补码是在其反码上,末位+1。
变量
* 变量:就是在程序执行过程当中可以发生变化的量,变量其实就是在内存开辟的一小块空间
* 定义变量的语法格式: 数据类型 变量名=值
* 数据类型:限定这个数据的范围,限定是哪一种类型
* 基本数据类型 和 引用数据类型
* 基本数据类型:四类八种
* 整数型
* byte 一个字节 -128(只有补码 1000000)--127
* short 两个字节 -2^15--2^15-1
* int 四个字节 -2^31-2^31-1
* long 八个字节 -2^63~2^63-1
* 浮点型
* float 四个字节 3.40310^38~3.40310^38
* double 八个字节 -1.798010^308~1.79810^308
* 布尔型
* boolean 一个字节
* 字符型
* char 两个字节
class VariableDemo{
public static void main(String[] args){
//定义不同数据类型的变量
//变量名符合通用规则,一般小写,studentName
byte a=-100;
byte b=127;
short c=111;
int d=1234;
//定义long类型的变量时,注意在值的后面加上一个后缀L,表示这是一个long类型的值。
//如果long赋予的值不超过int类型的范围,L不加也可以,如果超过了,则必须加上后缀L。
long e=1234567L;
//定义float类型的变量时,注意在值的后面加上以恶个后缀F,表示这是一个float类型的值。
float f=2.35F;
double g=6.6;
//定义布尔类型的变量,值就两个:true 和 false
boolean flag1=true;
boolean flag2=false;
//定义字符类型的变量,注意只是单引号引起来的单个字符。
char ch1='a';
char ch2='我';
//根据变量名来输出不同变量的值
System.out,println(a);
System.out,println(b);
System.out,println(c);
System.out,println(d);
System.out,println(e);
System.out,println(f);
System.out,println(g);
System.out,println(flag1);
System.out,println(flag2);
System.out,println(ch1);
System.out,println(ch2);
}
}
隐式转换和强制转换
class VariableDemo2{
public static void main(String[] args){
//定义变量的注意事项
//1.在同一个作用域内,不能定义同名变量。
//作用域:同一对大括号所括起来的范围。
int a=21;
//int a=100;//报错
a=321;//重新赋值
int num;
num=231;
//2.变量必须赋值才能使用
int p=24;int u=321;//一行可以定义多个变量。
int q=p;//把一个变量的值,赋给另一个变量。
byte b=1;
byte c=2;
//数据类型的隐式转换(数据类型的自动提升)
//当byte short char 类型的变量参与运算时,会自动提升为int类型。
//如果还有 long float double 类型的变量参与运算时会相应的提升为long float double类型
//sum=b+c;//报错
byte sum=(byte)(b+c);
//强制类型转换:丢弃多余字节,只保留目标字节,这样做有可能会造成精度损失
System.out.println(a);
System.out.println(num);//byte参与运算,结果自动提升为int类型。强制转换,就会丢弃前三个字节,保留一个字节
System.out.println(q);
}
}
进制以及进制转换
1. 进制:一种进位制,比如X进制,就是逢X进1.
2. 二进制的由来:根据电子元器件的开关位状态来的: 1 表示开, 0 表示关。
3. 国际组织规定: 1byte=8bit;1KB=1024Byte;1MB=1024KB;1GB=1024MB;
4. 字节是计算机中表示数据的最小单位
5. 进制越大,数据的表现形式越短
6. 为了区分不同进制,可以加上前缀 0B100(二进制) 0100(八进制) 100(十进制) 0X100(十六进制)
进制转换
任意进制---转换成10进制
* 位权展开法: 系数*基数的权次方
* 系数:待转换数据的每一位上的数字
* 基数:待转换数据的进制。例:2进制基数为2,8进制基数为8
* 权数:待转换数据,从右往左给编号,从0开始
十进制数据---转换成任意进制
* 除基取余,直到商为0,余数翻转
算术运算符的基本用用法
1. 运算符:对常量和变量进行操作的符号称为运算符。
2. 运算符的分类:
1. 算术运算符(+ - * / % ++ --)
+号的作用:
1. 作用1:充当相加的作用,也就是数字运算符
2. 作用2:起拼接的作用,当+号运算两端,只要任意一端是个字符串,就会其拼接作用,把两端内容拼接起来形成一个新的字符串
2. 赋值运算符(= += -= *= /= %=)
3. 比较运算符(== != < > <= >= )
4. 逻辑运算符
5. 位运算符
6. 三目运算符
class MathOperator{
public static void main(String[] args){
//算术运算符
int a=10;
int b=3;
System.out,println(a/b);//商
System.out,println(a%b);//取余
System.out,println(a-b);//差
System.out,println(a*b);//积
System.out,println(a+b);//和
//++自身增1 --自身减1
int i=1;
i++;
i--;
++i;
--i;
System.out,println(i);
//(++)(--)单独使用时,放在变量前后没有区别
//混合使用时。++放在后面,先使用,后运算;++放在前面,先运算,后使用。--同理
//赋值运算符
//+=
int y=12;
//y=y+5;//等价于 y+=5
y+=5; //+=会自动进行强制类型转换。其它同理。
System.out,println(y);
//比较运算符
//比较运算符的结果是布尔类型
boolean x=5>3;
x=5==5;//注意比较两个数书否相等,用”==“号
System.out,println("b:"+b);
}