带妹学Java第一天(至Scanner)

一.重点总结

1.进制

进制是一种方法。对于任何一种进制–X进制,就代表某一种位置上的数运算时逢X进一位
二进制就是逢二进一,
八进制就是逢八进一,
十进制就是逢十进一,
十六进制就是逢十六进一

2.原码反码补码

1、原码,最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小
/***
* 左边是最高位,右边是最低位
* +7:
* 0 0000111 (12^2 + 12^1 + 1*2^0 = 4 + 2 + 1)
* -7
* 1 0000111
*
* 8个1:11111111(先不分正负数) = 255
* 7个1:1111111(先不分正负数) = 127
*
*
*/

// 2、反码
// 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
/**
* +7:0 0000111(原码)
* +7:0 0000111(反码)
*
* -7:1 0000111(原码)
* -7:1 1111000(反码)
*/

// 3、补码
// 正数的补码与其原码相同;负数的补码是在其反码的末位加1
/**
* +7:0 0000111(原码)
* +7:0 0000111(反码)
* +7:0 0000111(补码)
*
* -7:1 0000111(原码)
* -7:1 1111000(反码) + 1
* -7:1 1111001(补码)
*/

3.java基本数据类型

整数型声明
	1、byte【字节型】 1个字节()
	2.short【短整型】 占2个字节, 取值范围【-32768~32768】2^15-1=32767
	3.int 【整型】 占4个字节,取值范围【-2^31~2^31-1】2^31-1=2147483647
	4.long 【长整型】 占8个字节,取值范围:【-2^63~2^63-1】2^63-1=9223372036854775807
	当你申明一个long时,在数据后面加个大写的L,也可以小写
浮点数据声明

1.float(单精度:表示的小数点的个数比较少) 取值范围:-3.403E38~3.403E38
2. double(双精度:表示的小数点个数比较多) 取值范围:-1.798E308~1.798E308

  • 单精浮点数占四个字节,双精浮点数占八个字节
  • 3.403E+38 表示的数是3.403*10^38
  • 单精度型使用F(f)标识,不加F,默认就是双精度
  • 赋值时候注意float类型,long类型,加大写的F和L

转换

数据类型转换之 “隐式转换”
  • 取值范围小的数据类型与取值范围大的数据类型进行运算会先将小的数据类型提升为大的,再运算。
数据类型转换之 “强制转换”
  • 强制转换会有一个安全隐患:损失精度
int x = 3;
		byte b = 127;
		//x = x + b;//隐藏转换
		//Type mismatch: cannot convert转换 from int to byte
		b = (byte)(b + x);
		System.out.println(b);
字符
  • 声明字符时,可以直接加上单引号,或者说直接赋值码表ASCII的数字
  • 字符的相加,实际是把码表数字相加

4.编码

Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。
1.因为Java语言采用的是Unicode编码,Unicode编码里可以存中文。
2.Unicode编码中的每个字符占用两个字节,一个中文也是占的两个字节
3.utf-8编码是unicode中的一种编码,
所以,Java中的字符可以存储一个中文汉字*/

	//GBK也是一个码表,码表可以存中文
	//10000:中
	
	//Unicode也是可以存中文
	//20000:中
	//如果出现乱码,一定是编码的问题

5.运算符

// 算数运算符有哪些
// + (加)
System.out.println( 10 + 10);//常量相加
int a = 10;
int b = 12;
System.out.println(a + b);//变量相加
System.out.println(a + 18);//变量与常量相加

// -(减)
System.out.println( a - b);

// *(乘)
System.out.println(a * b);

// /(除)
System.out.println(10 / 5);

// %(模-取余数)
System.out.println(10 % 7);
// ++(递增,在原来数字的基础上+1)
int a = 10;
System.out.println(a);
a++;//+1
System.out.println(a);
a++;

// – (递减,在原来数字的基础上-1)
int b = 120;
System.out.println(b);
b–;
b–;
b–;
System.out.println(b);

  • 算术运算符注意事项
  1. +号在java中有三种作用,代表正号[少用],做加法运算,字符串的连接
System.out.println(+120);//正号[少用]
System.out.println(10 + 110);//加法运算
System.out.println("a=" + 10);//字符串的连接
  1. 整数相除只能得到"整数"。如果想得到"小数",必须把数据变化为浮点数类型
System.out.println(10 / 4);
System.out.println(10.0 / 4);
System.out.println(10 / 4.0);
System.out.println(10 /3.0);
  1. /获取的是除法操作的"商",%获取的是除法操作的余数
System.out.println(10 / 3);
System.out.println(10 % 3);

6.逻辑运算符有哪些

  1. & 逻辑与,有false则false,只有两边都为true时,才返回true。
  2. | 逻辑或,有true则true。
  3. ^ 逻辑异或,相同为false,不同为true。
  4. ! 逻辑非:非false则true,非true则false。
  • && 逻辑与
//	最终与&结果一样。
System.out.println(4 > 3 & 5 < 4);//true:false
System.out.println(4 > 3 && 5 < 4);//true:false
  • &&具有短路效果。左边是false,右边不执行。
int b = 10;
int a = 9;
System.out.println(b++ > 10 && a++ < 8);//false:false
System.out.println("b=" + b);
System.out.println("a=" + a);
//&是无论左边是false还是true,右边都会执行
  • || 逻辑或【只要有一个结果是true,返回的结果就是true】
    ||与|结果是一样的
    ||具有短路效果。左边是true,右边不执行。
    |是无论左边是false还是true,右边都会执行

7.位运算符有哪些

& 按位与    有00,其它为1
/**
		 * 00000000 00000000 00000000 00000110:6
		 * 00000000 00000000 00000000 00000101:5
		 * 00000000 00000000 00000000 00000100:4
		 * */
		System.out.println(6 & 5);
| 按位或    有11,其它为0
		/**
		 * 00000000 00000000 00000000 00000110:6
		 * 00000000 00000000 00000000 00000101:5
		 * 00000000 00000000 00000000 00000111:7
		 * */
		System.out.println(6 | 5);
^ 按位异或   相同则0,不同则1
		/**
		 * 00000000 00000000 00000000 00000110:6
		 * 00000000 00000000 00000000 00000101:5
		 * 00000000 00000000 00000000 00000011:3
		 * */
		System.out.println(6 ^ 5);
		
		//注意:一个数按位异或2次相同的数,值不变
		//System.out.println(16^5^5);
		
//		~ 按位取反      按位补运算符翻转操作数的每一位 得到的是结果的补码  结果即源码
		/**
		 * 00000000 00000000 00000000 00000110:  6
		 * 11111111 11111111 11111111 11111001:取反 (-7的补码)
		 * 11111111 11111111 11111111 11111000: (-7的反码)
		 * 10000000 00000000 00000000 00000111: (-7的原码)
		 * */
		System.out.println(~6);
<<按位左移 ,右边补齐0,最高位不变
/**
		 * 10000000 00000000 00000000 00000010
		 * 10000000 00000000 00000000 00100000
		 */
		System.out.println(-2 << 2);
		
		
>>按位右移 ,左边补齐0,最高位不变
		//10000000 00000000 00000000 00010000:16
		//10000000 00000000 00000000 00000100
		System.out.println(-16 >> 2);
		
>>>无符号右移,没有<<<
		System.out.println(-8 >>> 2);//与8>>2结果一样

8.三元运算符的格式

  • (关系表达式) ? 表达式1 : 表达式2;
案例演示:获取两个数中的最大值*/
int x = 20;
int y = 119;
int max = (x > y) ? x : y;
System.out.println("最大值:"+max);

9.键盘录入

Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();

二.练习题

  1. 写出下面打印的值a,b,c
int a = 10;
int b = 10;
int c = 10;
a = b++;//a=10,b=11
c = --a;//a=9,c=9
b = ++a;//a=10,b=10
a = c--;//a=9,c=8
//结果:9,10,8
System.out.println(a);
System.out.println(b);
System.out.println(c);
  1. int x = 4; int y = (x++)+(++x)+(x*10);求y的值
int x = 4;
		
int y = (x++) + (++x) + (x*10);
/***
 * (x++)+(++x)+(x*10);
 * 
 * 4 + 6 + 60 = 70
 * 
 * a = x++ //a = 4;x=5
 * b = ++x //x = 6;b=6
 * c = x*10//c = 6 * 10
 */
System.out.println(y);//重点考察++a a++的运算方式
  1. 下面哪句会报错,为什么
byte b = 10;
//Type mismatch: cannot convert from int to byte
//类型不匹配,int不能转成byte,可以强制转换,有可能损失精度,数值不正确
b = (byte)(b + 1);
System.out.println(b);
  1. 请自己实现两个整数变量的交换
int x = 1;
int y = 2;
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println("=====================");

//对换两个变量
int tmp = x;//临时变量
x = y;
y = tmp;
System.out.println("x=" + x);
System.out.println("y=" + y);
  1. 请自己实现两个整数变量的交换(不需要定义第三方变量)
    考点:
    * 位异或运算符的特点:
    * ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
int x = 1;
int y = 2;
x = x ^ y;//x = 1 ^ 2
y = x ^ y;//y = 1 ^2 ^ 2 = 1
x = x ^ y;//x = 1 ^ 2  ^ 1 = 2
//异或运算满足交换律
System.out.println("x="+x);
System.out.println("y="+y);
  1. 获取两个数中最小的数
int x = 12;
int y = 2;
int min = (x < y) ? x : y;
System.out.println("最小值:"+min);
  1. 比较两个数是否相同【使用三元运算符实现】
int a = 1;
int b = 1;
//System.out.println(a == b);
boolean isEqual = (a == b) ? true : false;
System.out.println("a与b是否相等:"+isEqual);
  1. 获取三个整数中的最大值
int a = 1;
int b = 0;
int c = 9;
//1.先a与b比较,获取一个最大值
int max = a > b ? a : b;

//2.再拿这个最大值与c比较
max = max > c ? max : c;
System.out.println("最大值是:"+max);

三.面试题

  1. long(8)与float(4)的取值范围谁大谁小
    回答:float的计算值的方式与long类型不一样
    float = (-1)s*M*2E ,E的取可以取到127
    long的最大值2^63-1,float的指数比long大,所以float的取值范围大
  2. 面试题(拓展运算符的好处)
  • 看下面的程序是否有问题,如果有问题,请指出并说明理由。
short s=1;s = s+1;
short s=1;s+=1
short s = 1;
//s = (short)(s + 1);//强制把int转成short
s +=1;//自动帮你强制类型转换

int a = 10;
//a = a / 4.0;
a /= 4.0;

//总结:扩展运算符会帮你自动进行强制类型转换
  1. 最有效率的算出2 * 8的结果
System.out.println(2 * 8);
//2 * 2^3
//00000000 00000000 00000000 00000010:2
//00000000 00000000 00000000 00010000

System.out.println(0b10000);

System.out.println(2 << 3);//左移

四.易错点

  1. 字符与字符串相加
char c1 = '0';//48
char c2 = 'B';//66

最终如果是两个字符先相加,把结果当成字符串相加

System.out.println(c1+c2+"java");//114java
System.out.println(c1+"java"+c2);//0javaB
  1. a++与++a的区别
    1>.当++在变量后面的时候,会先将变量中的值取出做"赋值操作",然后再"自身加1"
    2>.当++在变量前面的时候,会先"自身加1",然后在将"结果赋值"
int a = 10;
int b = a++;
//int b = ++a;
System.out.println("a="+a);
System.out.println("b="+b);
  1. 练习2

附件

字符
Eclipse快捷键

发布了24 篇原创文章 · 获赞 4 · 访问量 598

猜你喜欢

转载自blog.csdn.net/qq_43488797/article/details/103656576