JAVASE第三天

数据类型的转换
    |-- 自动类型转换
        整型 和 浮点型 运算,整型会自动向浮点型转换
        小类型和大类型进行运算时,小类型会自动的转换为大类型
        char  byte < short < int < long <  float < double < String 

        如果是整数,默认转换的类型是int !!!
        如果是浮点型,默认类型是double 

    |-- 强制类型转换
        在java中,低类型可以自动向高类型转换,这就是上面的自动类型转换
        如果需要高类型向低类型转换,java不允许自动完成转换,会报错!!
        会损失精度
        如果确实需要这个操作,可以进行强制类型转换
        
        需要的类型 变量 = (需要的类型)值
        

课堂练习题:
    提供了一个字符类型 char c = '中',要求求出"中"的unicode码

        方案1:可以进行强制类型转换
            (int)c

        方案2:使用自动类型转换
            c + 0


java、C语言、C++、C#这些语言都是强数据类型语言
    值的类型是确定,也是不能随意改变的

python、PHP、JavaScript这些语言都是弱数据类型语言
    类型可以随意变化

    
常见的运算符:
算术运算符:
    就是数学中的四则运算

    +
    -
    *
    /    // 整除,只获取商的部分
    %    // 余数,求余,求模


关系(比较)运算符:
    >
    <
    >=
    <=
    ==
    !=

    关系运算符最终结果是一个boolean类型,表示是否成立!!
    true:成立
    false:不成立


    
逻辑运算符:
    两个或者更多条件之间的关联关系
    
    与(&&  &):并且的意思
    或(||  |):或者的意思
    非(!):不是,取反的意思
    

    &&和&的区别:
        &&和||,叫做短路与(或)
        如果前面的条件已经可以得到结果,则不会继续向后判断,效率较高
        而单与(或),即便是已经得到结果,还是会继续完成所有判断,在返回结果

        一般推荐使用&& 、 ||


自加和自减运算符
    ++        // 加1
    --        // 减1

    如 int a = 10
    System.out.println(a++);
    System.out.println(++a);
    System.out.println(a--);
    System.out.println(--a);

    注意,对于++、-- 自家自减运算符而言,不管前还是后,对于变量本身而言
    肯定要进行加1或者减1操作

    
    注意2:在自加运算符中,前加加或者前减减优先级别非常高,仅次于括号
        后加加和后减减的优先级别非常低,甚至比赋值符(=)还低


赋值运算符
    =        // 将右侧的值,最终赋值给左侧
    +=        // a += 10    <==>  a = a + 10
    -=        // a -= 1    a = a - 1
    *=
    /=
    %=


三目(木)运算符:
    
    表达式 ? a : b
    如:
    int c = a < b ? 100: 1000


移位运算符:
    是计算机底层进行的运算规则

    &        // 按位与
    |        // 按位或
    ^        // 异或
    ~        // 按位取反
    <<        // 左移运算
    >>        // 有符号右移
    >>>        // 无符号右移


计算机底层到底如何保存数据
    
    计算机底层以二进制(数据的补码)进行数据保存和运算
        bit(位):简写b,计算机中最小单位
        byte(字节):简写B,计算机中基本单位
        ……

    


    符号位:计算机为了描述数字的正负,而设计的位置,是二进制数据的最高位
        如果最高位是0,则表示该数是正数
        如果最高位是1,则表示该数是负数

    
    问题:如果直接使用二进制进行计算,当引入了负数时,我们发现结果出现了错误
        计算机为了解决这个问题,引入了如下三个概念:

    原码:数据被转换为二进制后的数值    如-3:  1000 0011
    反码:符号位不变,其余各位取反            1111 1100
    补码:反码 + 1                    1111 1101


    正数的原码、反码、补码一致,或者说正数只有原码(三码合一)

    计算机中所有数据都是基于补码进行运算和存储的!!!!

进制之间的转换问题:
    10 -->  2进制
        对十进制的数,进行除2,获取余数

    2进制  --> 10进制
        1010

        个位*2^0 + 十位*2^1 + = 
        0 + 2 + 0 + 1 * 8 = 10 


为什么要学习和掌握移位运算:
    CPU的所有运算都是基于移位运算
    移位的效率比其他运算符效率高


    &        // 按位与
    |        // 按位或
    ^        // 异或
    ~        // 按位取反
    <<        // 左移运算
    >>        // 有符号右移
    >>>        // 无符号右移


    &:    两者为真,否则为真
    |:    两者为假,否则为假
    ^:    相反为真,否则为假
    ~:    所有位,都进行取反,注意(和反码不一样)
    <<:    二进制向左移动
    >>:    有符号二进制向右移动,补符号位
    >>>:    无符号二进制向右移动,补0

面试题:如果将2以效率最高的方式变成8


计算机中,常规情况下,移位效率最高,加减次之,乘除再次之
注意:现在计算机体系中,移位运算和加法运算效率差不多

int a = 10
int b = 11


a : 0000 1010
b :0000 1011


0000 1010
0000 1011
------------
0001 0101        // 21


十进制的数据进行运算的特点:逢十进一
二进制的数据进行运算的特点:逢二进一

byte a = 2
byte b = -3     1000 0011
short bb = -3    1000 0000 0000 0011
int bbb = -3    1000 0000 0000 0000 0000 0000 0000 0011
        
a + b = -1

0000 0010
1111 1101 
----------
1111 1111 

1111 1110
1000 0001    -1


10&11
0000 1010
0000 1011    &
------------
0000 1010    10

10 | 11
0000 1010
0000 1011    |
------------
0000 1011    11

10 ^ 11
0000 1010
0000 1011    ^
------------
0000 0001    1


~a
~0000 1010
1111 0101
1111 0100
1000 1011    -11

<<
10 << 2
0000 1010


移位运算的一些规则,在运算中的使用
    1、&运算符
        |-- 判断奇偶
            num % 2 == 0
            num & 1 == 0
        |-- 判断一个数是否是2的幂次方
            num & (num - 1)

    2、异或运算
        任何数和0异或,值不会发生变化
        两个相同的值(同一个数),做异或,结果为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值