黑马程序员_JAVA基础之数据类型转换

------- android培训java培训java博客、java学习型技术博客、期待与您交流! ----------

2.1对于整数:java有三种表现形式。

         十进制:  0-9 ,满101

         八进制:  0-7 ,满81,用0开头表示

       十六进制:  0-9 A-F , 16,用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变成00变成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 类型占个字节 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是整数占48位,则要想进行用算,系统会自动把b类型进行提升。举个例子,好比两个四两的碗,得到的结果还是四两碗,如果把这四两的碗再交给b二两的碗,此时就会装不下,而报错!3也是整数,但3b的范围内,是个固定的值,所以可以是byte b=3;

   若想进行运算就的进行强制转换:b=(byte)(b+2),相当于把对于的碗强制砍掉;可能丢失精度。

2、两个数的模运算

   1%5=12%5=23%5=3

   5%5=05%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类型的表达式

   例1int 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|000000  00000000  00000000  00000011  

后:     |00000000   00000000  00000000  00001100  空缺用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代表false1代表true

    1 1 0

  & 0 1 1

------------------

0 1 0 = 2 

(或运算):

例:6 | 5=7

计算机二进制运算过程,0代表false1代表true

    1 1 0

  |  1 0 1

------------------

1 1 1 = 7

^  (异或运算)

16 ^ 5 = 3;

计算机二进制运算过程,0代表false1代表true

    1 1 0

  ^ 1 0 1

------------------

0 1 1 = 3 

27 ^ 4 ^ 4 = 7

规律:一个数异或同一个数两次,结果还是这个数.

练习:int m=3,n=4;

mn的值进行替换

方法一:定义第三方变量

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/


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_wangtao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值