美文网首页
Java学习笔记之程序基本概念

Java学习笔记之程序基本概念

作者: 丶Castiel | 来源:发表于2017-07-19 14:10 被阅读0次

    一、数据类型

    1.Java数据类型划分,见下图:

    数据类型.png

    2.Java基本数据类型的大小、范围、默认值,见下图:

    Java基本数据类型的大小、范围、默认值.jpg

    如果超过了int的最大值或最小值的结果,会怎么样呢?

        public static void main(String[] args) {
            
            int max = Integer.MAX_VALUE; //取出最大值
            int min = Integer.MIN_VALUE; //取出最小值
            System.out.println(max);     //2147483647
            System.out.println(min);     //-2147483648
            //int变量 +/- int型常量 = int型数据
            System.out.println(max + 1); //最大值加1:-2147483648
            System.out.println(min - 1); //最小值减1:2147483647
            System.out.println(min - 2); //最小值减2:2147483646
            
        }
    

    由于max或min变量都属于int型变量,而当int型变量与int型变量进行计算后其结果依然是int型。但是此时由于计算超过了其保存的范围,就会出现一个循环的操作,最大值如果继续增加就会变为最小值,随后一直向其次的最小值进行循环,反之最小值减1就变为最大值,此种现象称为数据的溢出,如下图所示。

    数据类型溢出.png

    如果学习过汇编语言的同学应该知道,在计算机中二进制是基本的组成单元,而int型数据一共占32位长度,也就是说第一位是符号位,其余的31位都是数据位。当数据已经是该数据类型保存的最大值时,如果继续进行“+1”的操作就会造成符号位的变更,最终就会形成这种数据溢出的问题。

    注:
    1.在Java中所有整数内容默认情况下都是int型数据;所有小数默认类型都是double。
    2.转义字符:换行(\n)、制表符(\t)、\(\\)、双引号(")、单引号(')

    二、自增运算符(++)&自减运算符(--)

    1.

    int x = 10;
    int y = x++*2;
    

    计算后得到:

    x = 11;
    y = 20;
    

    **注:“++”放在变量x之后,表示先使用x计算,之后x的内容再自增。

    2.

    int x = 10;
    int y = ++x*2;
    

    计算后得到:

    x = 11;
    y = 22;
    

    **注:“++”放在变量x之前,表示先将x的内容自增,再进行计算。
    自减运算符同理~

    三、位运算符

    1.与运算符(按位与) &

    int x = 19&20; //x=16
    19转二进制:10011
    20转二进制:10100
    按位与结果:10000,即16
    注:只有两个位都是1,结果才是1    
    

    2.或运算符(按位或) |

    int x = 19|20; //x=23
    19转二进制:10011
    20转二进制:10100
    按位或结果:10111,即23
    注:只要两个位有一个是1,结果为1    
    

    3.非运算符(按位非) ~

    int x = ~19; //x=-20
    
    简单记忆方法:
    ~19: 19+1=20,取反为-20;
    ~(-5): -5+1=-4,取反为4
    

    按位非(非运算符)运算规律如下:

    ~(-5):


    ~(-5)计算过程.png

    ~19 :


    ~19计算过程.png

    慢着,之前按照简单记忆方法,~19的值不是-20吗,怎么这边算出来为-18了?网上查了下说正数的原码、反码、补码一样,WTF! 而且正数的按位非计算过程和负数的还不一样,见下图:

    ~19 :


    ~19计算过程.png

    ~5 :


    ~5计算过程.png

    分析以上计算过程可知,正数和负数的按位非计算过程完全相反:
    负数的按位非计算过程:原码除符号位外取反,加1,取反得到结果
    正数的按位非计算过程:原码取反,减1,除符号位外取反得到结果

    4.异或运算符(异或) ^

    int x = 19^20; //x=7
    19转二进制:10011
    20转二进制:10100
    异或结果:00111,即7
    注:相同为0,不同为1    
    

    5.左移位 <<

    int x = 19<<2; //x=76
    
    简单记忆方法:
    19*2^2 = 19*4 = 76
    

    **
    规则:
    1.丢弃最高位,0补最低位;
    2.当左移的运算数是int类型时,每移动1位它的第31位就要被移除并且丢弃;
    3.当左移的运算数是long类型时,每移动1位它的第63位就要被移除并且丢弃;
    4.当左移的运算数是byte和short类型时,将自动把这些类型扩大为int类型。
    **

    19<<2:

    19左移两位.png
    注:如对int类型移动33位,超过了该类型最大位数,实际上只移动了1位。

    6.右移位 >>

    int x = 19>>2; //x=4
    
    简单记忆方法:
    19/(2^2) = 19/4 ,取整为4
    

    规则:符号位不变,左边补上符号位(符号位扩展)

    19>>2:


    19右移两位.png

    6.无符号右移位 >>>

    int x = 19>>>2; //x=4
    
    

    规则:忽略了符号位扩展,0补最高位
    注:只对32位和64位的值有意义

    四、请解释&和&&、|和||的区别?

    (1)逻辑运算

    1.与运算分为普通与(&)和短路与(&&)两种

    &: 所有的判断条件都要判断;
    &&: 如果前面的判断返回false,后面不再判断,最终结果就是false。

    2.或运算分为普通或(|)和短路或(||)两种

    |: 所有的判断条件都要判断;
    ||: 如果前面的判断返回true,后面不再判断,最终结果就是true。

    (2)位运算

    位运算包括位与运算(&)、位或运算(|),其中"&&"和"||"不能应用在位运算上。

    相关文章

      网友评论

          本文标题:Java学习笔记之程序基本概念

          本文链接:https://www.haomeiwen.com/subject/caslkxtx.html