Java基础之进制,常量,变量,运算符
常量
在程序的运行过程中,其值是不可以发生改变的量。
常量的分类:字面值常量
整数常量12,-23
实数常量12.5,-65.43
字符常量'a','A','0'
字符串常量"hello"
布尔常true,false
空常量null
自定义常量(后面讲)
final
常量可以直接被输出
常量可以直接被输出
进制
电信号有两种方式,开和关。但是生活中的很多数据都装载不下。所以制定了用八个开关表示一个数据,后来用数据改进,1表示开,0表示关
是一种进位的方式。X进制,表示逢x进1。
Java中整数常量的表示
1:二进制 由0,1组成,以0b开头,JDK7以后的新特性
2:八进制 由0-7组成,以0开头
3:十进制 由0-9组成,默认就是十进制
4:十六进制 由0-9,A-F(不区分大小写)组成,以0X开头
Java中整数常量的表示
1:二进制 由0,1组成,以0b开头,JDK7以后的新特性
2:八进制 由0-7组成,以0开头
3:十进制 由0-9组成,默认就是十进制
4:十六进制 由0-9,A-F(不区分大小写)组成,以0X开头
其它进制转换为10进制
系数:每一位上的数据
基数:?进制转换到10进制,基数就是?
权:从右面数,对应位上的编号就是该位的权
结果:系数 * 基数的权次幂结果相加
037 --> 31
0X56B --> 1387
101101 --> 49
2的1次幂 2
2的2次幂 4
2的3次幂 8
2的4次幂 16
2的5次幂 32
2的6次幂 64
2的7次幂 128
2的8次幂 256
2的9次幂 512
2的10次幂 1024
10进制转换其他进制
除基取余,直到商为0,余数反转
进制转换快捷方式
十进制二进制互相转换的快捷方式
128 64 32 16 8 4 2 1
十进制 --> 二进制
6 --> 110
34 --> 100010
二进制 -->十进制
10010 --> 18
10011 --> 19
二进制和八进制十六进制相互转换
二进制--八进制(3位组合)
二进制--十六进制(4位组合)
二进制--十六进制(4位组合)
原码反码和补码
在计算机中,数据都是以补码的形式存在的
原码:最高位是符号位,其它位是数据位。0表示正,1表示负。
反码:正数的反码和补码相同,负数的反码除了符号位,剩下的数据位取反。1->0 0->1。
补码:整数一样,负数的话反码+1
1+(-1)无论怎么运算,都要先转换为补码,符号位也参与运算
补码:00000001
补码:原码1000 0001 --> 反码1111 1110 -->补码1111 1111
0 0000001
+ 1 1111111
————————
10 0000000
数据类型
byte 1byte -128 到 + 127short 2byte -2^15 到 +2^15-1int 4byte -2^31 到 +2^31-1long 8byte -2^63 到 +2^63-1float 4byte -3.403E38 到 3.403E38 (科学表示法 e表示10 38表示次幂)double 8byte -1.798E308 到 1.798E308
在使用数据类型的时候,需要考虑占内存少的
整数默认int,小数默认double
定义数据类型时候,float和long需要注意
char里面能写中文就是因为java用的是unicode编码表,占两个字节
数据类型转换
自动类型转换(隐示转换)
1.类型兼容(boolean类型不能参与转换)
2.目标类型大于原类型(精度低的向精度高的转换)
3.byte short char -->int-->long-->float-->double
强制类型转换(显示转换)
1.类型兼容(boolean类型不能参与转换)
2.目标类型小于原类型(精度高的向精度低的转换)
面试:
byte b = (byte)300;
原码:00000000 00000000 00000001 00101100 转换为byte 00101100
反码:00101100
补码:00101100
值:44
byte b = (byte)130;
原码:00000000 00000000 00000000 10000010 转换为byte 10000010
反码:11111101
补码:11111110
值:-126,因为最高位数为1,代表负数,所以不要参与运算
面试:
byte b = 1;
byte b2 = 2;
byte b3 = b + b2;
byte b4 = 1 + 2;
byte b3 = b + b2不行,因为如果等式的右面表达式为变量时,先会转换为int类型,然后在赋值给左变的变量。这时,精度高的给精度低的赋值赋不进去,报错。
而当等式的右面表达式为常量时,先进行运算,在判断值是否在数据类型的接收范围内
面试:
byte b = 127;
b += 1;
127
补码 01111111(因为是byte类型)
+ 00000001
---------------------------------------------------
10000000(特殊?!)
位运算符
面试
int a = 1;int b = 2;交换变量异或a = a ^ b; a = a ^ b;b = a ^ b; b = a ^ b ^ b = aa = a ^ b; a = a ^ b交换变量a = a + b; a = 1 + 2b = a - b; b = 1 + 2 - 2 = 1a = a - b; a = 1 + 2 - 1 = 2位移运算
面试题
3 * 8 = ? 效率最高? 必须有一个数符合2的次幂吗?
变量概述 |
变量是一个数据存储空间的表示 |
变量的声明 |
1.数据类型 变量名; 变量名 = 值; |
2.数据类型 变量名 = 值; |
|
标示符的命名规范 |
帕斯卡pascal:开头字母大写,其它,每个开头字母都大写(SelectInfomation) |
驼峰标示Camel:首字母小写,其它,每个开头字母都大写(selectInformation) |
|
匈牙利:将数据类型的简写作为开头,(iAge,strName) |
|
涉及到缩写的全部大写:USA SOS |
|
标示符的命名规则 |
字母大写的A-Z到小写的a-z,数字0-9(不可以作为开头)加下划线和美元符号,不可以有关键字,不可以有特殊字符 |
运算符 |
赋值 = |
算数 + - * / %(小 % 大 = 小) |
|
关系 > >= < <= == != |
|
逻辑 & | && || !^ | |
三元表达式 条件表达式 ? 表达式1 : 表达式2; | |
数据类型自动转换 |
1.类型兼容 |
2.目标类型大于原类型 |
|
强制转换 |
精度高转为精度低的需要强转(double -> int) |
Scanner
|
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
Scanner input = new Scanner(System. in);
if (input.hasNextInt())
{
int number = input.nextInt();
System. out .println("限制输入了int类型:" + number);
}
else
{
System. out .println("请输入整型!" );
}
}
}
|
if | 如果 |
if else | 如果 否则 |
random | int random = (int)(Math.random * 10); |
switch | 接受类型 byte short int char,可以在case后面不加break(*C#混淆) JDK7版本之后出现了String |
while,do while | while-先条件,在循环。do-while-至少会执行一遍 |
for |
for(int x=1; /*1*/ x<=10; /*2*/ x++/*4*/ )
{
System. out.println("循环体" );/*3*/
}
|
break | 停止,跳出循环 |
continue | 绕过本次循环,进行下次循环 |
break: 终端,跳出,结束
跳出的是所在的循环
单独存在时,下面的语句没有意义
continue:
继续,绕过
单独存在时候,下面不要放语句
|