------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! ----------
2.1对于整数:java有三种表现形式。
十进制: 0-9 ,满10进1
八进制: 0-7 ,满8进1,用0开头表示
十六进制: 0-9 ,A-F , 满16进1 ,用0x开头表示。
进制之间的转换。
1、十进制--->二进制。6的二进制。
原理:对十进制数进行除2运算。
java代码方法计算:Integer . toBinaryString(6)
2、二进制---》十进制。
原理:二进制乘以2的过程。
1》二进制:1 1 0
0*20 + 1*2 1+ 1*22 = 6
2》二进制 0 1 1 0 1 0 1
计算规律 64 32 16 8 4 2 1 = 1+4+16+32=53
3、其他进制转换。
1》转成16进制 (四个二进制位就是一个十六进制。)
十进制 90
二进制 0101 -- 1010
十六 5 10 A ====> 90 = 0x5A
计算机内存中二进制算法:
0000-0000 0000-0000 0000-0000 0101-1010
& 0000-0000 0000-0000 0000-0000 0000-1111 =15
0000-0000 0000-0000 0000-0000 0000-1010 =10----->A
>>>4(无符号右移4位&15,空位用0补,避免负数)
0000-0000 0000-0000 0000-0000 0101-1010
& 0000-0000 0000-0000 0000-0000 0000-1111 =15
0000-0000 0000-0000 0000-0000 0000-0101 = 5
所以得到90的十六进制是 5A
2》转成8进制
三个二进制位代表一位
二进制 001 011 010
八进制 1 3 2 =(132)
4、负数的二进制表现形式。
6 =110
-6 :其实就是6的二进制取反+1
取反?就是将二进制的1变成0,0变成1.
6的二进制: 0000-0000 0000-0000 0000-0000 0000-0110
取反后: 1111-1111 1111-1111 1111-1111 1111-1001
+ 1 : + 0000-0000 0000-0000 0000-0000 0000-0001
1111-1111 1111-1111 1111-1111 1111-1010 = - 6
注:Java int 类型占4 个字节 1字节=8bit ; 负数的最高位都是1.
2.2 java的基本数据类型
Java定义了8个简单的数据类型:
字节型(byte) ,1字节=8 bit,
短整型(short), 2字节=16 bit,
整型(int), 4字节=32 bit,
长整型(long), 8字节=64 bit,
字符型(char), 2字节=16 bit,
浮点型(float), 4字节=32 bit
双精度型(double),8字节=64 bit
布尔型(boolean).
1、类型的转换。
Byte b=3; b=b+2; 结果报错!
原因:java的强类型导致,b在内存中占一个8位,2是整数占4个8位,则要想进行用算,系统会自动把b类型进行提升。举个例子,好比两个四两的碗,得到的结果还是四两碗,如果把这四两的碗再交给b二两的碗,此时就会装不下,而报错!3也是整数,但3在b的范围内,是个固定的值,所以可以是byte b=3;
若想进行运算就的进行强制转换:b=(byte)(b+2),相当于把对于的碗强制砍掉;可能丢失精度。
2、两个数的模运算
1%5=1;2%5=2;3%5=3
5%5=0;5%1=0
1%-5=1;
-1%5=-1;
规律:左边<右边结果是左边;左边=右边结果是0;右边=1结果0;如果左或右出现负数,则结果只看左边。
计算小规则:int a=3,b;
b=a++;//表示a先把值赋给b然后在加1 ;结果:b=3;a=4
b=++a; //表示a先加1,然后吧值赋给b ;结果:b=4;a=4
思考:int a=0,b=0,c ;
c=(a++)+(a++);
System.out.println(c);结果:1 ---->c=0+1
int a=0,b=0,c ;
c=(a++)+(b++); System.out.println(c);结果:0 -->c=0+0
2>转义字符:通过\来转变后面字母或者符号的含义。
\n:换行。\b:退格,相当于backspace。\r:按下回车键。Windows系统回车符\r\n;
\t:制表符。相当于tab键.
System.out.println(”/”wangtao/””); 结果是:”wangtao”
2.3运算符
①赋值运算符 =,+=,*=,/=,%=
摘要:int a=3; a+=5等同于运算a=a+5
提取面试题:short s=3 ;那么s=s+2 与 s+=2 有什么区别?
答:s=s+2 //编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。
s+=s //编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。
②比较运算符 ==,!=,<,>,<=,>=
instanceof 检查是否是类的对象 例:”hello” instanceof String 结果:true
注意:比较运算符的结果都是boolean型,也就是要么true,要么false。
③逻辑运算符 &(AND与)、|(OR或)、^(xor异或)、!(not非)、&&(and短路)、||(or短路)
用于连接boolean类型的表达式
例1、int x=7;
x>3 & x<6 = false
总结:& (与):只要两边的boolean表达式结果,有一个为false,那么结果就是false。
只有两边都为true,结果才为true 。
| (或):两边要有一个为true,结果为true 。只有两边都为false ,结果为false 。
^ (异或):就是和|有一点不一样,当true ^ true = false …… ;
两边相同结果为false ,两边不同结果是true 。
&和&&的特点:
&:无论左边是true还是false,右边都要运算。
&&:当左边为false时,右边不运算,效率高。
| :两边都参与运算。
|| :当左边为true,右边不运算 。
④位运算符 <<(左移)、>>(右移)、>>>(无符号右移 ) 、&(与)、|(或)、
^(异或)、~(反码)~6=-7 ;
左移
举例:3<<2=12 ; 3<<1=6 ; 3<<3 =24
规律:3*22 =12 3*21=6 ; 3*23 =24 要左移的数 * 2要位移的个数
计算机内存中的计算过程(二进制):3<<2
前: 00|00—0000 0000—0000 0000—0000 0000—0011
后: |0000—0000 0000—0000 0000—0000 0000—1100 空缺用0补齐 结果12
右移
6>>2=1 ----> 6/22 =1 ;
6>>1=3 ----> 6/21=3 .
计算机运算过程同上,在此不再阐述。
总结:<< :其实就是乘以2的移动的位数次幂 。
>> :就是除以2的移动的位数次幂。
注:最快的运算是位运算,局限:都是以2的倍数移动
>>与>>>的对比:
1111-1111 1111-1111 1111-1111 1111-1010 = -6
>> 111111-1111 1111-1111 1111-1111 1111-10 |10
>>> 001111-1111 1111-1111 1111-1111 1111-10 |10
>>: 最高位补什么由原有数据的最高位值而定。
如果最高位0,右移后,用0补空位。
如果最高位1,右移后,用1补空位。
>>>: 无论最高位是什么,右移后,都用0补。
&(与运算):
例: 6 & 3=2
计算机二进制运算过程,0代表false,1代表true;
1 1 0
& 0 1 1
------------------
0 1 0 = 2
| (或运算):
例:6 | 5=7
计算机二进制运算过程,0代表false,1代表true;
1 1 0
| 1 0 1
------------------
1 1 1 = 7
^ (异或运算)
例1:6 ^ 5 = 3;
计算机二进制运算过程,0代表false,1代表true;
1 1 0
^ 1 0 1
------------------
0 1 1 = 3 ;
例2;7 ^ 4 ^ 4 = 7
规律:一个数异或同一个数两次,结果还是这个数.
练习:int m=3,n=4;
将m与n的值进行替换
方法一:定义第三方变量
int temp=n,
n=m,
m=temp;
方法二:利用异或规律(技巧)
n = n ^ m;
m= n ^ m; //(n^m)^m
n = n ^ m; //n^(n^m)
三元用算符练习(局限性:必须有运算结果):
int a = 2;
int b;
b=a>1?(b=100):(b=200);
------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! ----------
如有疑问:http://edu.csdn.net/