_____Java编程基础_____
基本知识成列出来太多,所以这里只记录在学习编程基础时候遇到的部分知识总结。
进制
概述:
计算机中数据是以01的二进制形式表示的
正数的二进制:
1字节等于8位二进制
01010101---二进制(1位二进制位代表1位)125--------八进制(3位二进制位代表1位)
55-------十六进制(4位二进制位代表1位)
所以进制转换以二进制为中介就显得特别简单
负数的二进制:
其实就是对应正数二进制取反再加1了
在32位Int类型中6的二进制:00000000-00000000-00000000-00000110
取反-----:11111111-11111111-11111111-11111001
加1------:11111111-11111111-11111111-11111010
计算机判断是否为负数的标记就是首位是否为1,所以可以看到32位有符号Int类型的最大值为31个1的二进制,相对而言64位的处理器就能处理有符号Int类型的最大值就为63个1的二进制了。
总结:
由此可见byte(8位)short(16位)int(32位)long(64位)三个整数类型的最大和最小值了对于float(32)和double(64)来说,最大值计算方式就不同了,详情参见http://blog.csdn.net/wenlei_zhouwl/article/details/7488760
逻辑运算符
&与:有false为false|或:有true为true
^异或:相同为false
&&短路与:运算时首次遇到false就停止后面的运算
||短路或:运算时首次遇到true就停止后面的运算
位运算符
>>右移-------:转换成二进制向右移动,如3>>1就等于0011->0001等于1<<左移-------:转换成二进制向左移动,如3<<1就等于0011->0110等于6
>>>无符号右移:值得注意的是负数的移动会导致符号位的1变成数值
&与运算------:6 & 3 -> 0110 & 0011 = 0010 = 2
|或运算------:6 | 3 -> 0110 | 0011 = 0111 = 7
^异或运算----:6 ^ 3 -> 0110 ^ 0011 = 0101 = 5
~反码--------:~6 -> ~(28个0)0110 = (28个1)1001 减1取反为(28个0)0111 = 7所以结果为-7
巧用位运算符:
1.乘除2的次方数可以左移或者右移动如:3*2 = 6 ==>0011<<1 = 0110 = 6
如:4/4 = 1 ==>0100>>2 = 0001 = 1
2.不用参数交换值
n = n^m;此时n=n^m,m=m
m = n^m;此时n=n^m,m=n^m^m=n
n = n^m;此时n=n^m^n=m,m=n
3.进制转换,如60转换成8进制操作如下:
60 & 7(111) 得到60的最低3位
60>>3除去最低3位,继续循环上一步就可以将得到8进制了
循环switch
执行顺序:
case由上至下,没有满足条件再在执行default,只要触发了case或者default,都会执行当前位置以下可执行代码并且case和default无效
结束条件:
触碰到switch的结束花括号}或者break
所以下面这个例子switch(x) {
default:
System.out.println("default");
case 1:
System.out.println("1");
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
}
结果为
default
1
2