国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法| Java的int類型最大值為什么是21億多?

這篇具有很好參考價值的文章主要介紹了算法| Java的int類型最大值為什么是21億多?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開篇

本文主要介紹在Java中,為什么int類型的最大值為2147483647

理論值

我們都知道在Java中,int 的長度為32位。

理論上,用二進制表示,32位每一位都是1的話,那么這個數(shù)是多少呢?

算法| Java的int類型最大值為什么是21億多?

我們來計算一下,第0位可以用20^00表示,第1位可以用21^11表示,第31位可以用231表示,那么32位二進制能夠表示的最大值為232 - 1,所以理論上32位數(shù)值的取值范圍為0 ~ 232 - 1。

那么,Java的int最大值真的為232 - 1嗎?

我們知道,232 - 1這個值為42億多。而在Java中,int的最大值為2147483647也就是21億多,為什么有這個差距呢?

分析

我們來看下,Javaint的最大值以及這個最大值的二進制數(shù)據(jù)。

算法| Java的int類型最大值為什么是21億多?

可以看到,int的最大值的最高位為0,而不是1,也就是用31位來表示能夠取到的最大值,而不是32位。 因為在Java中,整型是有符號整型,最高位是有特殊含義,代表符號,真正表示數(shù)據(jù)值的范圍為0 ~ 30位。

所以,按照31位來表示的話,其最大值為231 - 1,而這個值就是2147483647即21億多。

int數(shù)據(jù)有正負之分,所以最高位用來表示符號,0代表正數(shù),1代表負數(shù)。因此Java中,int的數(shù)據(jù)范圍為 -231 ~ 231 - 1。

為啥減1

那為什么都是231, 正數(shù)的時候需要減1呢?

我們先來看一下,int的最大值和最小值:

算法| Java的int類型最大值為什么是21億多?

不看符號位的話,最大值比最小值少了1個,這是因為0歸到正數(shù)里面,所以占用了正數(shù)的一個位置。

拓展

負數(shù)表示

負數(shù)的二進制形式如何表示呢?

先看-100這個數(shù)的二進制形式:

算法| Java的int類型最大值為什么是21億多?

最高位為1,就代表負數(shù)。值就為符號位后面的值取反再加上1。

算法| Java的int類型最大值為什么是21億多?

二進制1100100對應(yīng)的10進制就是100.

反碼

反碼就是,對一個數(shù)的二進制除符號位外,按位取反。取反就是二進制數(shù),1變成0,0變成1,這個過程就是取反。

來看一個例子:

算法| Java的int類型最大值為什么是21億多?

可以看到,a、b兩個數(shù)的二進制是完全相反的。

為什么要取反加1呢?為什么要設(shè)計的這么扭曲?到底是人性的扭曲還是道德的淪喪? 這樣設(shè)計有什么好處?

在計算機系統(tǒng)里,加減乘除的運算,并不是我們想象中10進制的加減乘除,他最后都會被翻譯成2進制的位運算來計算。

假如有2個數(shù),a、b都是整數(shù),那么a + b 對應(yīng)的二進制就是簡單的相加。那么如果a為負數(shù),b為正數(shù)呢?在執(zhí)行a + b 的時候,難道還需要特殊處理一下嗎?顯然是不可能的,在二進制運算中,加減乘除運算只有各自的一套邏輯,無論符號兩邊的數(shù)是什么樣子的。

a為負數(shù),那么對a進行取反加1,再與b進行相加,可以按正常的相加邏輯,這樣運算結(jié)果依然是正確的,而不是說,當a為負數(shù)時,計算機去執(zhí)行另一套的相加邏輯。設(shè)計成取反加1,可以讓相加運算不去關(guān)注兩邊的數(shù)據(jù)是正是負,只執(zhí)行一套相加邏輯就可以了,這對計算機來說是一個性能的提升。

示例

從上面我們得知,負數(shù)的二進制表示為數(shù)值部分取反加1,以-100為例,那么可以得出-100 等于 ~100 + 1

算法| Java的int類型最大值為什么是21億多?

知道負數(shù)的二進制的樣子后,再看int最小值和-1的二進制數(shù)據(jù),就不會驚訝了。要不然,當看到int的最小值的二進制居然是一堆0組成,而-1居然是一堆1,看到這樣的數(shù)據(jù),心里豈不是冒出一堆問號或者一群小羊飄過。

算法| Java的int類型最大值為什么是21億多?

取反加1還是自己的數(shù)

有沒有一個數(shù),取反加1還是自己?有,0int的最小值,下面來看下:

算法| Java的int類型最大值為什么是21億多?

先看下Integer.MIN_VALUE的取反加1的過程,可以看到,Integer.MIN_VALUE在取反后加上1,仍然還是他自己。

算法| Java的int類型最大值為什么是21億多?

再看下0的取反加1過程,可以看到0再取反加1后,我嘞個去,居然溢出了!溢出怎么辦?溢出就扔了吧不要了,結(jié)果還是他自己。

算法| Java的int類型最大值為什么是21億多?

后記

本文主要介紹在Java中,為什么int類型的最大值為什么是21億多,以及涉及到的知識點的拓展,如有錯誤歡迎之處。文章來源地址http://www.zghlxwxcb.cn/news/detail-444297.html

到了這里,關(guān)于算法| Java的int類型最大值為什么是21億多?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • JAVA-x和y的最大值

    輸入兩個整數(shù) x 和 y,請你編寫一個函數(shù), int max(int x, int y) ,計算并輸出 x 和 y 的最大值。 輸入格式 共一行,包含兩個整數(shù) x 和 y 。 輸出格式 共一行,包含一個整數(shù),表示兩個數(shù)中較大的那個數(shù)。 數(shù)據(jù)范圍 ?100≤x,y≤100 輸入樣例: 輸出樣例: ?

    2024年02月10日
    瀏覽(12)
  • 想要精通算法和SQL的成長之路 - 分割數(shù)組的最大值

    想要精通算法和SQL的成長之路 - 分割數(shù)組的最大值

    想要精通算法和SQL的成長之路 - 系列導(dǎo)航 原題鏈接 首先面對這個題目,我們可以捕獲幾個: 非負整數(shù)。 非空連續(xù)子數(shù)組。 那么我們假設(shè)分割后的子數(shù)組,和的最大值是 M ,對應(yīng)分割的子數(shù)組個數(shù)為 N 。他們之間必然存在以下關(guān)系: 分割的子數(shù)組個數(shù) N 越多,對應(yīng)的

    2024年02月07日
    瀏覽(30)
  • 算法每日一題: 分割數(shù)組的最大值 | 動歸 | 分割數(shù)組 | 貪心+二分

    算法每日一題: 分割數(shù)組的最大值 | 動歸 | 分割數(shù)組 | 貪心+二分

    Hello,大家好,我是星恒 嗚嗚嗚,今天給大家?guī)淼挠质且坏澜?jīng)典的動歸難題。 題目:leetcode 410 給定一個非負整數(shù)數(shù)組 nums 和一個整數(shù) k ,你需要將這個數(shù)組分成 k_ 個非空的連續(xù)子數(shù)組。 設(shè)計一個算法使得這 k _個子數(shù)組各自和的最大值最小。 示例: 示例 1: 示例 2: 示例

    2024年01月22日
    瀏覽(21)
  • 128基于matlab的粒子群優(yōu)化算法尋找多元函數(shù)的最大值

    128基于matlab的粒子群優(yōu)化算法尋找多元函數(shù)的最大值

    基于matlab的粒子群優(yōu)化算法尋找多元函數(shù)的最大值,可定義多元函數(shù),變量區(qū)間范圍,輸出最大值條件下的變量值。程序已調(diào)通,可直接運行。 128matlab多元函數(shù)極值 (xiaohongshu.com)

    2024年01月22日
    瀏覽(21)
  • 華為OD機試之矩陣最大值(Java源碼)

    題目描述 給定一個僅包含0和1的N*N二維矩陣,請計算二維矩陣的最大值,計算規(guī)則如下: 1.每行元素按下標順序組成一個二進制數(shù)(下標越大越排在低位),二進制數(shù)的值就是該行的值。矩陣各行值之和為矩陣的值。 2.允許通過向左或向右整體循環(huán)移動每行元素來改變各元素

    2024年02月11日
    瀏覽(20)
  • Java8中Stream流求最大值最小值

    1. stream().reduce()實現(xiàn) 2. stream().max()或stream().min()實現(xiàn) 1. stream().reduce()實現(xiàn) 2. Collectors.summarizingInt()實現(xiàn) 3. stream().max()或stream().min()實現(xiàn) 1. stream().reduce()實現(xiàn) 2. Collectors.summarizingLong()實現(xiàn) 3. stream().max()或stream().min()實現(xiàn) 1. stream().reduce()實現(xiàn) 2. Collectors.summarizingLong()實現(xiàn) 3. stream().max(

    2024年01月17日
    瀏覽(30)
  • 算法刷題Day 13 滑動窗口最大值+前K個高頻元素

    乍一看有點單調(diào)棧的意思,但其實不是。 仔細想想應(yīng)該是用優(yōu)先隊列,似乎也不對,從滑動窗口出來的元素不好從隊列中刪除 看了隨想錄之后,是用到單調(diào)隊列 使用單調(diào)隊列有坑的地方: case: nums =[-7,-8,7,5,7,1,6,0], k = 4 單調(diào)隊列在push的時候,如果紅框為 = 號,那么結(jié)果會出

    2024年02月13日
    瀏覽(28)
  • 【人工智能】實驗四:遺傳算法求函數(shù)最大值實驗與基礎(chǔ)知識

    【人工智能】實驗四:遺傳算法求函數(shù)最大值實驗與基礎(chǔ)知識

    實驗?zāi)康?熟悉和掌握遺傳算法的原理、流程和編碼策略,并利用遺傳算法求解函數(shù)優(yōu)化問題,理解求解流程并測試主要參數(shù)對結(jié)果的影響。 實驗內(nèi)容 采用遺傳算法求解函數(shù)最大值。 實驗要求 1. 用遺傳算法求解下列函數(shù)的最大值,設(shè)定求解精度到15位小數(shù)。 (1)給出適應(yīng)度

    2024年02月03日
    瀏覽(88)
  • 【華為OD機試】矩陣最大值(python, java, c++, js)

    前言 :本專欄將持續(xù)更新華為OD機試題目,并進行詳細的分析與解答,包含完整的代碼實現(xiàn),希望可以幫助到正在努力的你。關(guān)于OD機試流程、面經(jīng)、面試指導(dǎo)等,如有任何疑問,歡迎聯(lián)系我,wechat:steven_moda;email:nansun0903@163.com;備注:CSDN。 給定一個僅包含0和1的N*N的二維

    2024年02月11日
    瀏覽(35)
  • 【華為OD統(tǒng)一考試B卷 | 100分】矩陣最大值(C++ Java JavaScript Python)

    在線OJ 已購買本專欄用戶,請私信博主開通賬號,在線刷題!?。?運行出現(xiàn) Runtime Error 0Aborted,請忽略 華為OD統(tǒng)一考試A卷+B卷 新題庫說明 2023年5月份,華為官方已經(jīng)將的 2022/0223Q(1/2/3/4)統(tǒng)一修改為OD統(tǒng)一考試(A卷)和OD統(tǒng)一考試(B卷)。 你收到的鏈接上面會標注A卷還是B卷。

    2024年02月08日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包