day02标识符,二进制转换,位运算符,类型转换,if,switch


2.1关键字,2.2标识符,2.3注释,2.4常量和变量,
2.5运算符,2.6语句,2.7函数,2.8数组。


//2.2标识符。
在程序中自定义的一些名称
由26个字母,数字,$_二个符号。
规则:
1.数字不能开头。
2.不能用关键字。
java中严格区分大小写。
main虽然不是关键字。但也是被jvm识别的。
命名规范:
包名:所有字母都是小写
类名接口名:多单词组成时,所有单词的首字母大写
变量名和函数名,多单词组成时,第一个单词首字母小写,
其他单词的首字母大写。
常量名:所有字母都大写。
//2.4常量和变量
常量:表示不能改变的数值。
1.整数常量:所有整数。
2.小数常量:所有小数。
3.布尔型常量:只有二个值:true,false.
4.字符常量:将一个数字或字母,数字符号用单引号('')标识。
5.字符串常量:将一个或多个数字或字母用双引号("")标识。
6.null常量:只有一个数值就是null.


对于整数,java有三种表现形式。
十进制:0-9,满10进1.
八进制:0-7,满8进1,用0开头表示。
十六进制:0-9,A-F,满16进1,用0x开头表示。


每个字节由八个开关组成。八个二进制。10100101。


二进制的每三个变成一个,变成八进制。
二进制的每四位变成1位,十六进制。更方便的表示数据。


//十进制和二进制:
十转二:6的二进制。
原理:对十进制数进行除2运算。6/2=011,反过来写110。
System.out.println(Integer.toBinaryString(6));


二进制变十进制。
原理:二进制乘2的过程。
110:0*2(0)+1*2(1)+1*2(2)=6;
0     0   1   1   0   1   0   1 =
128   64  32  16  8   4   2   1 = 


5    +    4   =    9
101  +   100  =  1001




转成十六进制。四个二进制就是一个16进制位。


0101-1010:90(先变十进制,再变十六)
5  10(A)  = 0x5A


转成八进制:三个二进制代表一位。
001 011 010 =132。
1 3 2


负数二进制表现形式:
6 = 110(0000-0000 0000-0000 0000-0000 0000-0110)
-6 =   (1111-1111 1111-1111 1111-1111 1111-1001)
0000-0000 0000-0000 0000-0000 0000-0001
1111-1111 1111-1111 1111-1111 1111-1010=-6
-6:其实就是6的二进制取反再加1。
负数的二进制的最高位都是1,怎么来的?取反来的。


//变量:就是将不确定的数据进行存储。也就是需要在内存中
开辟一个空间。
如何开辟内存空间呢?就是明确数据类型,

明确变量名和数据来完成的。


byte:一个八位,八个二进制位。(-128-127)
short:2个八位。16个二进制。
int :四个八位。  long l = 4l:


数据类型 变量名 = 初始化值;int x = 4;
float f = 2.3f;(四个八位)
char ch = '4'; char ch3 = ' ';可以。
char ch = "你";可以的
当数据不确定的时候,需要对数据进行存储时,
就定义一个变量来完成存储。


自动类型转换(也叫隐式类型转换)
强制类型转换(也叫显式类型转换)
//类型转换的原理 
什么时候要用强制类型转换?
表达式的数据类型自动提升
所有的byte,short,char的值将被提升为int型。
字符1和数字1不同。'1':49
char为什么能进行运算?因为在ascii码中都有对应的数字。

2.5 算术运算符+-*/,++,--,
赋值运算符
比较运算符
逻辑运算符
位运算符
三元运算符
取模就是取余数。10%4=2
5%1=0;左边小于右边,取模为左边。
取模的正负看左边。
b=a++;++叫给a变量的值加1,并赋给b,是先赋值再自加。
b=++a;a先自加,再赋值。
+:可作字符串连接符。字符串数据和任何数据使用+号都是连接,
都会变成字符串。


转义字符。通过\反斜线来转变后面字母或者符号的含义。
\n:换行。\b:退格 \r:回车键 \t:相当于tab.制表符


赋值运算符=
x+=4;相当于x=x+4;
short s = 4;s=s+5;不行的。二次运算,不会自动转换。
short s = 4;s+=5;可行的。一次运算,在范围内会自动转换。
比较运算符,>,<,==:结果为真或假。
逻辑运算符
&,|,^,!,&&,||,
x>3 & x<6
&特点:只要两边的boolean,只要二边一个false,结果就是false,
只有二边都为true,才为true;
^:异或:就是和|不一样,当true^true = false;
两边相同,结果为false,两边不同,结果为true;
false ^false = false;
&&:短路与:当前面的表达式不成立时,后面不再运算.
||当左边为true,右边不参与。


3<<2:3左2位。
  3    <<  2:为12
0000-0011-〉0000-1100;12.后面补0。
6>>2:6右移2位:为1
0000-0110 >>0000-0001。前面补0
3<<2:3*4;3*2的二次方。


<<向左移,移多少位,就是乘二的几次幂。
>>向右移,移多少位,就是除以二的几次幂。
6>>2:6/4=1转换成int,小数舍去。
>>右移,最高位为1,前面补1。
>>>:无符号右移。无论最高位是什么,都用0补。


6  &  3  =  2;
110&011 =010; (0不假,1为真)


6   |  5 = 7;
110 | 101 = 111;
异或:
6   ^  5  =3
110 ^ 101 = 011
   
   ~:反码,就是取反。
   7^4^4=7;一个数异或一个数二次,结果还是那个数。


  练习题:最有效率的方式算出2乘以8等于几?
   最有效率的方式是二进制的左移右移,乘以8就相当于向
   左移动3位,2的三次方等于8,所以为 2<<3 ;(位运算)


   对二个整数变量的值进行互换,不要第三方变量。
   需要第三方变量的互换我们都会,那不需要第三方的变量呢?
   关键就是借助一个数异或同一个数二次,会变回原来的值。


   int x =3; int y = 8;
//第一种。
   x = x + y;
   y = x - y;
   x = x - y;


   x = x ^ y;
   y = x ^ y;
   x = x ^ y;


   三元运算符。
   (条件表达式)?表达一:表达表二。
   条件表达式为真,就计算表达式一,条件为假就计算二。
好处:可以简化if else代码。
弊端:因为是一个运算符,所以运算完成必须要有一个结果。




   拿最低四位,
   那就是拿最低四位的1,那就拿四个1去与一下。拿15去与。


   拿第二个最低四位。先右移四位,再拿四个1去与。


   12-10=2+'A';(char)67;(char)(12-10+'A');


2.6程序流程控制
判断结构,选择结构,循环结构


判断结构if()
1。 if(条件表达式)  
{
执行语句;
}


2.  if(条件表达式)  
{
执行语句;
}else
{
执行语句;
}


3.  if(条件表达式)  
{
执行语句;
}else if(条件表达式)
{
执行语句;
}
...
else
{
执行语句;
}
注意,一个if是一个语句。
需求,根据用户指定月份,打印相对应的季节。




选择结构:
switch (表达式)
{
case 取值一 :
执行语句;
break;
case 取值二 :
执行语句;
break;
...
default:
执行语句;
break;//(最后的break可以省略)
}
//表达式的值只接受四种,byte,short,int ,char,1.5版本。
//default,可以随便放哪,都在最后执行。
//二种结束方式,一为break;一为最后的大括号。


//传说 switch 比 if 语句的效率高。


if和switch语句很像
具体什么场景下,应用哪个语句?
如果判断的具体数值不多,而是符合 byte short int char 这四种类型
虽然两个语句都可以使用,建议使用switch,因为效率稍高。
其他情况:对区间的判断,对结果是boolean类型的,使用if,范围更广。
另:switch 在jdk5.0版本增加对枚举选择,7.0增加对 String 选择。

不管switch语句中如何  只要碰到第一个合适的case(如果找不到合适的case 则为default) 将继续执行下去 直到遇到第一个break退出

int   a  = 10  ;
switch(a){
case 1:
case 2:show("2");
case 10:show("10");
case 3:show("3");
case 4:show("4");break;
case 5:
case 6:
default: show("default");


输出:

10 
3
4

找到 case 10 继续顺序执行  直到碰到第一个break


但是将case10 删掉 有如下所示又会怎么样呢?:

a  = 10;

switch(a){
case 1:
default: show("default");
case 2:show("2");
case 4:show("4");break;
case 3:show("3");
case 5:
case 6:

}


如图 第一步:a = 10 本就该去匹配 case 10 但是找不到 故去匹配default

第二步:因为匹配了default后 没有break 继续执行default 后面的代码 直到找到case4 的break 退出switch

所以结果为:

default
2
4


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值