jdk源碼:Long.toString(long i, int radix)和Long.toUnsignedString(long i, int radix)

1. 區(qū)別

toString方法將數(shù)字轉(zhuǎn)為有符號(hào)數(shù)對(duì)應(yīng)的字符串塑崖,toUnsignedString是將數(shù)字轉(zhuǎn)為有符號(hào)數(shù)對(duì)應(yīng)的字符串。

2. toString(long i, int radix)

public static String toString(long i, int radix) {
        if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
            radix = 10;
        if (radix == 10)
            return toString(i);
        char[] buf = new char[65];
        int charPos = 64;
        boolean negative = (i < 0);

        if (!negative) {
            i = -i;
        }

        while (i <= -radix) {
            buf[charPos--] = Integer.digits[(int)(-(i % radix))];
            i = i / radix;
        }
        buf[charPos] = Integer.digits[(int)(-i)];

        if (negative) {
            buf[--charPos] = '-';
        }

        return new String(buf, charPos, (65 - charPos));
    }
  • 當(dāng)要轉(zhuǎn)為十進(jìn)制的時(shí)候燕侠,直接用toString方法,toString里面主要是用了getChars方法,我們?cè)谥?a target="_blank" rel="nofollow">http://www.chenchen.zone/articles/2018/09/27/1538041030708.html講過(guò)。
    public static String toString(long i) {
        if (i == Long.MIN_VALUE)
            return "-9223372036854775808";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(buf, true);
    }
  • 當(dāng)非10進(jìn)制的時(shí)候
boolean negative = (i < 0);
if (!negative) {
            i = -i;
        }

        while (i <= -radix) {
            buf[charPos--] = Integer.digits[(int)(-(i % radix))];
            i = i / radix;
        }
        buf[charPos] = Integer.digits[(int)(-i)];

        if (negative) {
            buf[--charPos] = '-';
        }

這里有個(gè)比較巧妙的地方我開(kāi)始沒(méi)有想通诊杆,就是為什么把數(shù)字都統(tǒng)一轉(zhuǎn)為負(fù)數(shù)來(lái)處理呢捉腥。首先肯定是統(tǒng)一轉(zhuǎn)為正數(shù)或者負(fù)數(shù)處理氓拼,那為什么是負(fù)數(shù)。答案就是有負(fù)數(shù)數(shù)字負(fù)數(shù)比負(fù)數(shù)多一個(gè)數(shù)字抵碟,比如64位系統(tǒng)Long的范圍是-9223372036854775808 ~ 9223372036854775807桃漾。當(dāng)遇到Long最大正數(shù)9223372036854775807時(shí),可以轉(zhuǎn)為-9223372036854775807拟逮,但是當(dāng)你遇到Long最小負(fù)數(shù)-9223372036854775808時(shí)轉(zhuǎn)為正數(shù)就會(huì)溢出呈队。所以統(tǒng)一轉(zhuǎn)為負(fù)數(shù)處理可以多處理一個(gè)數(shù)。

3. toUnsignedString(long i, int radix)

    public static String toUnsignedString(long i, int radix) {
        if (i >= 0)
            return toString(i, radix);
        else {
            switch (radix) {
            case 2:
                return toBinaryString(i);

            case 4:
                return toUnsignedString0(i, 2);

            case 8:
                return toOctalString(i);

            case 10:
                /*
                 * We can get the effect of an unsigned division by 10
                 * on a long value by first shifting right, yielding a
                 * positive value, and then dividing by 5.  This
                 * allows the last digit and preceding digits to be
                 * isolated more quickly than by an initial conversion
                 * to BigInteger.
                 */
                long quot = (i >>> 1) / 5;
                long rem = i - quot * 10;
                return toString(quot) + rem;

            case 16:
                return toHexString(i);

            case 32:
                return toUnsignedString0(i, 5);

            default:
                return toUnsignedBigInteger(i).toString(radix);
            }
        }
    }

作者 @沒(méi)有故事的老大爺
一定要專注宪摧,這樣才會(huì)忘記痛苦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粒竖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子几于,更是在濱河造成了極大的恐慌蕊苗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沿彭,死亡現(xiàn)場(chǎng)離奇詭異朽砰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)喉刘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瞧柔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人睦裳,你說(shuō)我怎么就攤上這事造锅。” “怎么了廉邑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵哥蔚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蛛蒙,道長(zhǎng)糙箍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任牵祟,我火速辦了婚禮深夯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诺苹。我一直安慰自己塌西,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布筝尾。 她就那樣靜靜地躺著捡需,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筹淫。 梳的紋絲不亂的頭發(fā)上站辉,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音损姜,去河邊找鬼饰剥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛摧阅,可吹牛的內(nèi)容都是我干的汰蓉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棒卷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顾孽!你這毒婦竟也來(lái)了祝钢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤若厚,失蹤者是張志新(化名)和其女友劉穎拦英,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體测秸,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疤估,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霎冯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铃拇。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沈撞,靈堂內(nèi)的尸體忽然破棺而出慷荔,到底是詐尸還是另有隱情,我是刑警寧澤关串,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站监徘,受9級(jí)特大地震影響晋修,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凰盔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一墓卦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧户敬,春花似錦落剪、人聲如沸唧垦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)旨剥。三九已至抄瑟,卻和暖如春凡泣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背皮假。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工鞋拟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惹资。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓贺纲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親褪测。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猴誊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Integer類為java基本類型int的包裝類潦刃,除了前面提到的Byte類,Short類中的大部分方法稠肘,Integ...
    Kinsanity閱讀 905評(píng)論 0 2
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line)福铅,也就是一...
    悟名先生閱讀 4,145評(píng)論 0 13
  • byte即字節(jié)的意思,java中的基本類型之一项阴、也是java中長(zhǎng)度最小的基本數(shù)字類型滑黔,通常在讀取文件時(shí)需要用字節(jié)數(shù)...
    Kinsanity閱讀 1,228評(píng)論 0 5
  • 2012年9月略荡,在杭州,我失業(yè)歉胶,帶著僅剩下的3萬(wàn)元存款汛兜,去川北藏區(qū)徒步,回來(lái)參加了一個(gè)課程通今,交完學(xué)費(fèi)粥谬,剩下1000...
    建琪覺(jué)醒閱讀 1,283評(píng)論 4 49
  • 812 世界大象日 昨天夜里,和小伙伴聊著聊著說(shuō)到了動(dòng)物保護(hù)的話題辫塌。起因是她讓我看了一段令人心寒的...
    小琪是我的小名閱讀 478評(píng)論 0 0