02 进制,数据类型,运算符
1:进制表示
十进制转换为任意进制:除基倒取余
任意进制转十进制:系数+基数的权次幂相加即可,,BCD码(8421码)
原码:二进制定点表示法, 0 正 1 负
反码:正数不变,负数原码除符号位取反
补码:正数不变,负数反码加1
运算是在补码的基础上
二进制:0b100 八进制: 0100 十进制: 100 十六进制: 0x100
对应十进制 4 64 100 256
2:关键字不能作为变量名
3:Java中的数据类型分几类?基本数据类型有哪些?
基本数据类型,和引用数据类型;
基本数据类型分为:
byte 1个字节
short 2
int 4
long 8
boolean 理论上占1/8个字节,但Java中没有明确指定大小
float 4
double 8
char 2 0~65535
同一个区域不能使用相同的变量名
局部变量在使用之前必须赋值
class DataType { public static void main(String[] args) { byte b = 10; short s = 20; int i = 30; // 正数默认 long x = 88888888888L; System.out.println(b); System.out.println(s); System.out.println(i); System.out.println(x); float f = 12.3F; double d = 33.4; // 小数默认 33.4d,d一般不加 System.out.println(f); System.out.println(d); char c = 'a'; System.out.println(c); boolean b1 = true; boolean b2 = false; System.out.println(b1); System.out.println(b2); } } /* 10 20 30 88888888888 12.3 33.4 a true false */
4:数据类型转换:
隐式转换:小的数据类型转换大的数据类型,
强制转换:
class DataType2 { public static void main(String[] args) { // 数据类型装换 Conversion // 隐式转换 // int x = 3; // byte b = 4; // x = x + b; // System.out.println(x); // 7 int x = 3; byte b = 4; // b = x + b; // System.out.println(b);//错误: 可能损失精度 b = (byte)(x + b); System.out.println(b); // 7
// int x = 3;
// byte b = 4;
// b = x + b;
// System.out.println(b);//错误: 可能损失精度
// b = (byte)(x + b);
// System.out.println(b); // 7
byte b = (byte)(126 + 4);
System.out.println(b); // -126
// 0 0 0 10000010 130的二进制
// 10000010 -126补码
// 10000001 -126 反码
// 11111110 -126 原码
byte b1 = (byte)(300);
System.out.println(b1); // 44
// 1 00101100 300
// 00101100 byte一个字节 -》 44 } }
5 :float与long
class DataTypeConversion { public static void main(String[] args) { // byte,short,char -- int -- long -- float -- double float f = 12.3f; long l = 12345; // f = l; // 隐式转换 // System.out.println(f); // 12345.0 l = (long)f; // 强制转换 System.out.println(f); /* float占4个字节 IEEE 754 规定 32个二进制位,1位代表符号,8位代表指数位.23位代表尾数位 0-255 0代表0 255代表无穷大,1~254都要减去127, 得-126 ~ 127 底层的存储结构不同,float比long的范围要大 */ } }
6. char相关
class DataChar { public static void main(String[] args) { System.out.println('a'+1); // 98 System.out.println((char)('a'+1)); // b System.out.println("5+5="+(5+5)); // 5+5=10 char a = 97; System.out.println(a); // a char b = '中'; System.out.println(b); // 中 java中的中文是Unicode编码,每个字符占2个字节 } }
7. 算数运算
class Operator { public static void main(String[] args) { System.out.println(10/3); // 3 System.out.println(10/3.0); // 3.33333333333333335 System.out.println(2%5); // 2 System.out.println(-2%5); //-2 System.out.println(-2%-5); //-2 System.out.println(2%-5); //2 System.out.println(13%-5); //3 int a = 3; // a++; // System.out.println(a); // 4 // ++a; // System.out.println(a); // 4 int b; // b = ++a; //先加再赋值 // System.out.println(a); //4 // System.out.println(b); //4 b = a++; //先赋值再加 System.out.println(a); //4 System.out.println(b); //3 } }
8 .运算符其他
(逻辑运算符的基本用法)(掌握)
* 逻辑运算符有哪些
* &,|,^,!
* &&,||
* 注意事项:
* a:逻辑运算符一般用于连接boolean类型的表达式或者值。
* b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
* 算术表达式:a + b
* 比较表达式:a == b(条件表达式)
* 结论:
* &逻辑与:有false则false。
* |逻辑或:有true则true。
* ^逻辑异或:相同为false,不同为true。
* !逻辑非:非false则true,非true则false。
* 特点:偶数个不改变本身。
(逻辑运算符&&和&的区别)(掌握)
* &&和&的区别?
* a:最终结果一样。
* b:&&具有短路效果。左边是false,右边不执行。
* &是无论左边是false还是true,右边都会执行
(位运算符的基本用法1)(了解)
位运算符有哪些
* &,|,^,~ ,>>,>>>,<<
* 位运算符的基本用法1
* &,|,^,~ 的用法
* &:有0则0
* |:有1则1
* ^:相同则0,不同则1
* ~:按位取反 (取反得补码,再求原码就是结果) 如~6 -> -7
(位异或运算符的特点及面试题)(掌握)
* ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
(位运算符的基本用法2及面试题)(了解)
* >>,>>>,<<的用法:
* <<:左移 左边最高位丢弃,右边补齐0
* >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
* >>>:无符号右移 无论最高位是0还是1,左边补齐0
* 最有效率的算出2 * 8的结果 (2<<3)
(三元运算符的基本用法)(掌握)
* 三元运算符的格式
* (关系表达式) ? 表达式1 : 表达式2;
面试题:
1:
byte b1=3,b2=4,b;
b=b1+b2;//出错因为在JAVA虚拟机中默认是int类型转换,虚拟机不知道b1 ,b2 中的数值到底是多少,所有会抛出可能损失精度的错误;
//虚拟机会把 b1,b2 转换成 int类型在进行运算,两个int类型的数值相加结果任然是int类型,int类型 不能赋值给 byte类型
b=3+4; // 7 java编译器有常量优化机制
哪句是编译失败的呢?为什么呢?
2:
byte by = 130;有没有问题?有问题如何解决?结果是多少呢? byte 的数值范围是 126~-127 130已经超出byte取值范围 运算是会砍掉前面的 三个8位
结果会变成-126
3:
byte b = 10;
b++;//这句 java虚拟机会做一个自动转换动作 相当于 b=(byte)(b+1)所以不会报错
b = b + 1;//这句java虚拟机会把,b转换成int类型 相当于 int b + int 类型的1 然后赋值给Byte类型 int是4个字节 byte是1个字节 所有会抛出损失精度
哪句是编译失败的呢?为什么呢?
4:常见的算术运算符有哪些?// + - * / % ++ -- += -= *= /=
+运算符的作用有哪些?// 链接符号(当字符串在前面时 必须作为连接符来使用) 算数运算符
答:正号,字符串连接符号,算术运算符
除法和取余的区别? // / 除法是求商 % 求余数
++和--的使用规则? a++ 先赋值在运算, ++a 先运算 再赋值
5:常见的赋值运算符有哪些?
+=运算的作用是什么? 等于自身去右边的数值,然后赋值给左边
扩展的赋值运算符有什么特点? 系统会自动 隐式转换。。。
6:short s = 1; s = s + 1;有没有问题?如果有怎么解决?答:short + int ->int ,s是short ,int->short,系统会抛出,损失精度的错误。需要改成 s = (short)(s + 1)
short s = 1; s += 1;有没有问题?如果有怎么解决?答:没有问题
7:常见的关系运算符有哪些?
答; 常见的关系运算符 == > < <= >= !=
关系运算符的结果有什么特点?
答:关系运算符 输出的结果 是boolean类型 要么为 true 要么为 false
8.两个整数变量交换
/* * 位异或运算符的特点 * ^的特点:一个数据对另一个数据位异或两次,该数本身不变。 */ //System.out.println(5 ^ 10 ^ 10); //5 //System.out.println(5 ^ 10 ^ 5); //10 //两个整数变量的交换 int x = 10; int y = 5; //需要第三方变量 /*int temp; temp = x; x = y; y = temp;*/ //不需要定义第三方变量,有弊端,有可能会超出int的取值范围 /*x = x + y; //10 + 5 = 15 y = x - y; //15 - 5 = 10 x = x - y; //15 - 10 = 5*/ //不需要第三方变量,通过^来做 x = x ^ y; // 10 ^ 5 y = x ^ y; // 10 ^ 5 ^ 5 y = 10 x = x ^ y; // 10 ^ 5 ^ 10 x = 5
9 常见的逻辑运算符有哪些?
| || & && !
&和&&的区别是什么?& 结果为真还会计算第二个表达式, &&一个为true 结果就为true 共同点:两个逻辑运算符结果都是一样
|和||的区别是什么?
答:结果一样.
| 只要一个为真结果就为真 两个都为false结果才为false 第一个结果为真还会判断第二个结果是否为真
|| 第一个结果为真,答案直接就为true 不会再判断第二个了
位运算符^的特点是什么? 异或两次同一个数,等于本身自己

浙公网安备 33010602011771号