最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基礎(chǔ)教程之整數(shù)運(yùn)算

 更新時間:2022年03月09日 09:11:44   作者:minseo  
Java的整數(shù)運(yùn)算與C語言相同,遵循四則運(yùn)算規(guī)則,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之整數(shù)運(yùn)算的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

引言

Java的整數(shù)運(yùn)算遵循四則運(yùn)算規(guī)則,可以使用任意嵌套的小括號。四則運(yùn)算規(guī)則和初等數(shù)學(xué)一致。例如:

public class Main {
    public static void main(String[] args) {
        int i=(100+200)*(99-88);//3300
        int n=7*(5+(i-9));//23072
        System.out.println(i);
        System.out.println(n);
    }
}

輸出

3300
23072

整數(shù)運(yùn)算的數(shù)值不但是精確的,而且整數(shù)運(yùn)算永遠(yuǎn)是精確的,即使是出發(fā),因?yàn)閮蓚€整數(shù)相除只得到結(jié)果的整數(shù)部分,不進(jìn)行四舍五入

int x=11/3;

求余運(yùn)算

int x=11%3;

整數(shù)除法對于被除數(shù)為0運(yùn)行時報錯,但編譯時不報錯

溢出

整數(shù)由于存在范圍限制,如果計(jì)算結(jié)果超出了范圍,就會產(chǎn)生溢出,而溢出不會報錯而會得到一個奇怪的結(jié)果。

public class Main {
    public static void main(String[] args) {
        int x=2147483640;
        int y=15;
        int sum=x+y;
        System.out.println(sum);
    }
}

運(yùn)行結(jié)果

-2147483641

要解釋上述結(jié)果,我們把整數(shù)2147483640和15換成二進(jìn)制做加法

0111 1111 1111 1111 1111 1111 1111 1000

+ 0000 0000 0000 0000 0000 0000 0000 1111

1000 0000 0000 0000 0000 0000 0000 0111

由于最高位計(jì)算結(jié)果為1,因此加法結(jié)果變成了一個負(fù)數(shù)

要解決上面的文件,可以把int換成long類型,由于long可表示的整型范圍更大,所以結(jié)果不會溢出

public class Main {
    public static void main(String[] args) {
        long x=2147483640;
        long y=15;
        long sum=x+y;
        System.out.println(sum);
    }
}

還有一種簡寫的運(yùn)算符,即+=,-=,*=,/=,使用方法如下

n+=100; //相當(dāng)于n=n+100
n-=100;//相當(dāng)于n=n-100

自增/自減

Java還提供了++運(yùn)算和--運(yùn)算,它們可以對一個整數(shù)進(jìn)行加1和減1的操作:

public class Main {
    public static void main(String[] args) {
        int n=100;
        n++;
        System.out.println(n);
        n--;
        System.out.println(n);
    }
}

注意++寫在前面和后面計(jì)算結(jié)果是不同的,++n表示先加1再引用n,n++表示先引用n再加1。不建議把++運(yùn)算混入到常規(guī)運(yùn)算中,容易自己把自己搞懵了。

移位運(yùn)算

在計(jì)算機(jī)中,整數(shù)總是以二進(jìn)制的形式表示。例如,int類型的整數(shù)7使用4字節(jié)表示的二進(jìn)制如下:

00000000 00000000 00000000 00000111

可以對整數(shù)進(jìn)行移位運(yùn)算。對整數(shù)7左移1位將得到整數(shù)14,左移2位將得到整數(shù)28

int n = 7;       // 00000000 00000000 00000000 00000111 = 7
int a = n << 1;  // 00000000 00000000 00000000 00001110 = 14
int b = n << 2;  // 00000000 00000000 00000000 00011100 = 28
int c = n << 28; // 01110000 00000000 00000000 00000000 = 1879048192
int d = n << 29; // 11100000 00000000 00000000 00000000 = -536870912

左移29位時,由于最高位變成了1,因此結(jié)果變成了負(fù)數(shù)

類似地對證書7進(jìn)行右移結(jié)果如下

int n = 7;       // 00000000 00000000 00000000 00000111 = 7
int a = n >> 1;  // 00000000 00000000 00000000 00000011 = 3
int b = n >> 2;  // 00000000 00000000 00000000 00000001 = 1
int c = n >> 3;  // 00000000 00000000 00000000 00000000 = 0

如果對一個負(fù)數(shù)進(jìn)行右移,最高位1不動,結(jié)果仍然是一個負(fù)數(shù)

int n = -536870912;
int a = n >> 1;  // 11110000 00000000 00000000 00000000 = -268435456
int b = n >> 2;  // 10111000 00000000 00000000 00000000 = -134217728
int c = n >> 28; // 11111111 11111111 11111111 11111110 = -2

還有一種不帶符號的右移運(yùn)算,使用>>>,它的特點(diǎn)是符號位跟著動,因此,對一個負(fù)數(shù)進(jìn)行>>>右移,它會變成正數(shù),原因是最高位的1變成了0:

int n = -536870912;
int a = n >>> 1;  // 01110000 00000000 00000000 00000000 = 1879048192
int b = n >>> 2;  // 00111000 00000000 00000000 00000000 = 939524096
int c = n >>> 29; // 00000000 00000000 00000000 00000111 = 7
int d = n >>> 31; // 00000000 00000000 00000000 00000001 = 1

對byte和short類型進(jìn)行位移時,會首先轉(zhuǎn)換為int再進(jìn)行位移

左移實(shí)際上就是不斷地*2,右移實(shí)際上就是不斷地/2

位運(yùn)算

位運(yùn)算是按位進(jìn)行與,或,非和異或的運(yùn)算。

與運(yùn)算的規(guī)則是,必須兩個數(shù)同時為1,結(jié)果才為1

n=0 & 0;//0
n=0 & 1;//0
n=1 & 0;//0
n=1 & 1;//1

或運(yùn)算的規(guī)則是,只要任意一個為1,結(jié)果就為1

n = 0 | 0; // 0
n = 0 | 1; // 1
n = 1 | 0; // 1
n = 1 | 1; // 1

非運(yùn)算的規(guī)則是,0和1呼喚

n = ~0; // 1
n = ~1; // 0

異或運(yùn)算的規(guī)則是,如果兩個數(shù)不同,結(jié)果為1,否則為0

n = 0 ^ 0; // 0
n = 0 ^ 1; // 1
n = 1 ^ 0; // 1
n = 1 ^ 1; // 0

對于兩個整數(shù)的運(yùn)算,實(shí)際上就是按位對齊,然后依次對每一位進(jìn)行運(yùn)算。例如

public class Main {
    public static void main(String[] args) {
        int i = 167776589;
        int n = 167776512;
        System.out.println(i&n);
    }
}

運(yùn)行結(jié)果

167776512

上述按位與運(yùn)算實(shí)際上可以看作兩個整數(shù)表示的IP地址10.0.17.7710.0.17.0,通過與運(yùn)算,可以快速判斷一個IP是否在給定的網(wǎng)段內(nèi)。

運(yùn)算優(yōu)先級

在Java的計(jì)算表達(dá)式中,運(yùn)算優(yōu)先級從高到低依次是:

  • ()
  • ! ~ ++ --
  • * / %
  • + -
  • << >> >>>
  • &
  • |
  • += -= *= /=

記不住也沒關(guān)系,只需要加括號就可以保證運(yùn)算的優(yōu)先級正確。

類型的自動提升與強(qiáng)制轉(zhuǎn)型

在運(yùn)算過程中,如果參與運(yùn)算的兩個數(shù)類型不一致,那么計(jì)算結(jié)果為較大類型的整型。例如,short和int計(jì)算,結(jié)果總是int,原因是short首先自動被轉(zhuǎn)型為int:

public class Main {
    public static void main(String[] args) {
        short s = 1234;
        int i = 123456;
        int x = s + i; //s自動轉(zhuǎn)換為int
        short y = s + i;//編譯錯誤
    }
}

也可以將結(jié)果強(qiáng)制轉(zhuǎn)型,即將大范圍的整數(shù)轉(zhuǎn)型為小范圍的整數(shù)。強(qiáng)制轉(zhuǎn)型使用(類型),例如,將int強(qiáng)制轉(zhuǎn)型為short:

int i=12345;
short s = (short) i;//12345

超出范圍的強(qiáng)制轉(zhuǎn)型會得到錯誤的結(jié)果,原因是轉(zhuǎn)型時,int的兩個高位直接直接被扔掉,僅保留了低位的兩個字節(jié)。

舉例說明

public class Main {
    public static void main(String[] args) {
        int i1 = 1234567;
        short s1 = (short) i1; // -10617
        System.out.println(s1);
        int i2 = 12345678;
        short s2 = (short) i2; // 24910
        System.out.println(s2);
    }
}

結(jié)果

-10617
24910

為什么結(jié)果是-10617和24910呢

首先把1234567轉(zhuǎn)換成二進(jìn)制并且使用8位分割成4份

00000000 00010010 11010110 10000111?

強(qiáng)制轉(zhuǎn)換成short類型或高位被拋棄留下低位兩個字節(jié)

11010110 10000111

最高位為1是負(fù)數(shù),負(fù)數(shù)是以補(bǔ)碼的形式存儲在計(jì)算機(jī)內(nèi)需要轉(zhuǎn)換成原碼

原碼等于補(bǔ)碼-1后除符號位取反

補(bǔ)碼-1結(jié)果

11010110 10000110

除符號位取反得到原碼

10101001 01111001

最高位為1所以是負(fù)數(shù)101001 01111001即-10617

同理計(jì)算12345678去掉高兩位后剩下的最高位為0是正數(shù)則補(bǔ)碼和原碼是一樣的

練習(xí)

計(jì)算自然數(shù)之和

public class Main {
    public static void main(String[] args) {
        int n=100;
        int sum=0;
        for(int i=1;i<=n;i++) {
            sum=sum+i;
        }
        System.out.println(sum);
    }
}

小結(jié)

整數(shù)運(yùn)算的結(jié)果永遠(yuǎn)都是精確的

運(yùn)算結(jié)果會自動提升

可以強(qiáng)制轉(zhuǎn)型,但超出范圍的強(qiáng)制轉(zhuǎn)型會得到錯誤的結(jié)果

應(yīng)該選擇合適范圍的整型(int或long),沒有必要為了節(jié)省內(nèi)存而使用byte和short進(jìn)行整數(shù)運(yùn)算。

總結(jié)

到此這篇關(guān)于Java基礎(chǔ)教程之整數(shù)運(yùn)算的文章就介紹到這了,更多相關(guān)Java整數(shù)運(yùn)算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring事務(wù)異?;貪L實(shí)例解析

    spring事務(wù)異?;貪L實(shí)例解析

    這篇文章主要介紹了spring事務(wù)異?;貪L實(shí)例解析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Springboot集成任務(wù)調(diào)度實(shí)現(xiàn)過程

    Springboot集成任務(wù)調(diào)度實(shí)現(xiàn)過程

    這篇文章主要介紹了Springboot集成任務(wù)調(diào)度實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • spring boot整合CAS Client實(shí)現(xiàn)單點(diǎn)登陸驗(yàn)證的示例

    spring boot整合CAS Client實(shí)現(xiàn)單點(diǎn)登陸驗(yàn)證的示例

    本篇文章主要介紹了spring boot整合CAS Client實(shí)現(xiàn)單點(diǎn)登陸驗(yàn)證的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Springmvc完成ajax功能實(shí)例詳解

    Springmvc完成ajax功能實(shí)例詳解

    在本篇文章里小編給大家整理了關(guān)于Springmvc完成ajax功能實(shí)例內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。
    2019-09-09
  • 關(guān)于Gateway網(wǎng)關(guān)中配置跨域的三種方案

    關(guān)于Gateway網(wǎng)關(guān)中配置跨域的三種方案

    文章總結(jié):介紹了三種處理跨域請求的方法:在Controller類上添加注解、通過配置類實(shí)現(xiàn)重寫WebMvcConfigurer接口和在配置文件中統(tǒng)一設(shè)置,希望這些方法能幫助讀者解決跨域問題
    2024-11-11
  • Java多線程 自定義線程池詳情

    Java多線程 自定義線程池詳情

    這篇文章主要介紹了Java多線程 自定義線程池,文章主要是學(xué)習(xí)代碼,沒有過多解析,需要的朋友可以參考一下文章的具體內(nèi)容
    2021-10-10
  • mybatis-plus  mapper中foreach循環(huán)操作代碼詳解(新增或修改)

    mybatis-plus mapper中foreach循環(huán)操作代碼詳解(新增或修改)

    這篇文章主要介紹了mybatis-plus mapper中foreach循環(huán)操作代碼詳解(新增或修改),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot整合PostgreSQL的示例代碼

    SpringBoot整合PostgreSQL的示例代碼

    本文主要介紹了SpringBoot整合PostgreSQL的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解

    Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解

    這篇文章主要介紹了Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • spring?boot?executable?jar/war?原理解析

    spring?boot?executable?jar/war?原理解析

    spring boot里其實(shí)不僅可以直接以 java -jar demo.jar的方式啟動,還可以把jar/war變?yōu)橐粋€可以執(zhí)行的腳本來啟動,比如./demo.jar,這篇文章主要介紹了spring?boot?executable?jar/war?原理,需要的朋友可以參考下
    2023-02-02

最新評論

吕梁市| 太康县| 开远市| 同江市| 东兰县| 岐山县| 吉木萨尔县| 黎城县| 涡阳县| 固镇县| 肇州县| 承德市| 安岳县| 资溪县| 温州市| 山西省| 巴中市| 霍林郭勒市| 灯塔市| 盐池县| 长寿区| 涟水县| 红桥区| 夏邑县| 宿州市| 东乡族自治县| 中西区| 枣庄市| 尼勒克县| 伊宁市| 华阴市| 武平县| 库车县| 东山县| 祁连县| 上犹县| 大邑县| 扎兰屯市| 郑州市| 丹凤县| 磐石市|