(2)數(shù)據(jù)的機(jī)器級表示與處理

本章內(nèi)容較多,很多問題查閱了一些博客和知乎問答,力求盡可能的詳細(xì),在語言實(shí)現(xiàn)層面主要是關(guān)注jvm的規(guī)范。

(一)數(shù)制和編碼

1.二進(jìn)制的意義和數(shù)據(jù)的基本運(yùn)算

計(jì)算機(jī)采用二進(jìn)制編碼的原因:
1.二進(jìn)制只有兩種狀態(tài),在電路層面制造兩個穩(wěn)定狀態(tài)的器件比多個穩(wěn)定狀態(tài)器件容易的多
2.二進(jìn)制的編碼,計(jì)數(shù),運(yùn)算規(guī)則簡便易行
3.布爾代數(shù)的完善以及邏輯門電路的匹配

基本數(shù)據(jù)類型:
數(shù)值型數(shù)據(jù):定點(diǎn)數(shù)(有符號定點(diǎn)整數(shù),無符號定點(diǎn)整數(shù))浮點(diǎn)數(shù)(單精度,雙精度)
非數(shù)值型數(shù)據(jù):邏輯數(shù)據(jù),編碼字符(字母和漢字等)

高級語言中用到的各種運(yùn)算,在底層都會被編譯為基礎(chǔ)的算數(shù)運(yùn)算指令和邏輯運(yùn)算指令。顯然如果能通過這些底層運(yùn)算完成高級運(yùn)算,效率會有些許提升 。
這些運(yùn)算包括位運(yùn)算(與:&,或:|,異或:^,取反:~,),邏輯運(yùn)算(或:||,與:&&,非:?。莆贿\(yùn)算(左移:<<,邏輯右移:>>>,算術(shù)右移:>>)。
關(guān)于位運(yùn)算的技巧,見技巧篇,邏輯運(yùn)算需要注意短路的問題。
另外值得注意的是移位運(yùn)算中邏輯左移操作不需要考慮符號位,高位移出,低位補(bǔ)0。而在算術(shù)左移中,與邏輯左移處理方式一致。當(dāng)無符號數(shù)或有符號數(shù)最高位移出的是1時,會發(fā)生溢出。(顯然有符號數(shù)左移其正負(fù)性有可能發(fā)生變化)
右移分兩種情況,邏輯右移指不考慮符號情況,低位移出,高位補(bǔ)0。而算術(shù)右移會使得低位移出,高位補(bǔ)符號位。這樣能夠保證負(fù)數(shù)右移,肯定還是負(fù)數(shù);正數(shù)右移,肯定還是正數(shù)。
在不發(fā)生溢出的情況下,對于整形變量,左移N位相當(dāng)于乘以2的N次冪,算術(shù)右移N位等于除以2的N次冪的整數(shù)部分(-1右移多少位還是-1,這是顯而易見的因?yàn)?1是全為1的序列,低位丟棄,高位補(bǔ)1),正數(shù)時結(jié)果向0方向取整,負(fù)數(shù)時向負(fù)無窮方向取整。邏輯右移是無法保證結(jié)果跟原值的關(guān)系的。默認(rèn)對于無符號整數(shù)采用邏輯移位,對帶符號整數(shù)采用算術(shù)移位。

在不同數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換時,需要分為擴(kuò)展(小變大)和截?cái)啵ù笞冃。﹥煞N情況。對于擴(kuò)展有兩種方式:0擴(kuò)展和符號擴(kuò)展。0擴(kuò)展用于無符號數(shù),會在新值比舊值多出來的位數(shù)部分添加足夠的0。符號擴(kuò)展用于補(bǔ)碼表示的有符號數(shù),會在新值比舊值多出來的位數(shù)部分添加足夠多的符號位。由于這種機(jī)制,在java中常見小數(shù)據(jù)向大數(shù)據(jù)轉(zhuǎn)換時有一個&0xff..操作,這就是為了能夠把符號擴(kuò)展變?yōu)?擴(kuò)展,從而規(guī)避掉意想不到的錯誤。截?cái)嘀挥幸环N方式,就是把舊值比新值多出來的位數(shù)舍棄掉。在強(qiáng)制類型轉(zhuǎn)換或隱式類型轉(zhuǎn)換時,需要注意是否會因?yàn)榻財(cái)嗪蛿U(kuò)展產(chǎn)生隱藏的錯誤。

2.定點(diǎn)數(shù)的編碼和運(yùn)算

通常用機(jī)器數(shù)表示數(shù)值數(shù)據(jù)在計(jì)算機(jī)編碼后的二進(jìn)制數(shù),而真值表示數(shù)值型數(shù)據(jù)實(shí)際的值。
對無符號數(shù)來說,比較簡單,跳過(其實(shí)也是用補(bǔ)碼表示的)。對于有符號數(shù),采取補(bǔ)碼表示,具體如下。
首先介紹一下模運(yùn)算的概念:
對于以下整數(shù),若A=B+K*M,則記為A\equiv B(mod M),A與B對模M同余
當(dāng)A,B都小于模M,計(jì)算A-B時,可以用A加上-B的補(bǔ)碼來代替
對于具有一位符號位和n-1位數(shù)值位的n位二進(jìn)制整數(shù)X的補(bǔ)碼
1.當(dāng)X為正數(shù)時,X的補(bǔ)碼等于其原碼
2.當(dāng)X為負(fù)數(shù)時,X的補(bǔ)碼等于模M-|X|
在使用二進(jìn)制固定位的計(jì)算機(jī)中,其實(shí)際計(jì)算時可以簡單認(rèn)為:
1.當(dāng)X為正數(shù)時,X的補(bǔ)碼等于其原碼
2.當(dāng)X為負(fù)數(shù)時,X的補(bǔ)碼等于數(shù)值部分取反加一,符號位為1(原碼也可以由補(bǔ)碼取反加1得到)
特殊情況:當(dāng)符號位為1,數(shù)值部分全為0時,取到n位二進(jìn)制數(shù)能表示的最小負(fù)數(shù)。這是規(guī)定。此時它沒有原碼一說。其實(shí)可以簡單理解為通過具備雙射性質(zhì)的補(bǔ)碼,簡化了減法運(yùn)算,同時保證了運(yùn)算結(jié)果的唯一性。

對于整數(shù)的四則運(yùn)算,暫時把注意力集中在標(biāo)志寄存器和溢出上。加減和乘法運(yùn)算器的運(yùn)算電路在計(jì)算機(jī)系統(tǒng)基礎(chǔ)第二版P64有詳細(xì)解釋。有以下幾個重要的標(biāo)志位:

1.ZF零標(biāo)志,ZF=1表示運(yùn)算結(jié)果所有位為0,否則ZF=0
2.OF溢出標(biāo)志,OF=1表示帶符號數(shù)加減運(yùn)算發(fā)生溢出,因?yàn)閮蓚€同符號數(shù)相加的結(jié)果的符號位一定等同于這兩個數(shù)的符號位,所以當(dāng)X和Y的最高位相同,但與結(jié)果的最高位不同時,OF=1,否則OF=0
3.SF符號標(biāo)志,表示帶符號數(shù)整數(shù)加減結(jié)果的符號位
4.CF進(jìn)/借位標(biāo)志,CF表示無符號數(shù)加減運(yùn)算的進(jìn)/借位。加法時,CF=1表示若最高位向上形成進(jìn)位,減法時,CF=1表示若最高位向上形成借位。、
在加減乘除指令產(chǎn)生運(yùn)算結(jié)果后都會根據(jù)結(jié)果產(chǎn)生以上四種標(biāo)志位,并將這些標(biāo)志信息保存到標(biāo)志寄存器中。
在此處只是簡單介紹,到第三章匯編指令時,會把標(biāo)志位寄存器連同CMP指令,和檢測比較結(jié)果的條件轉(zhuǎn)移指令聯(lián)立講解。
注意對于有符號數(shù),只有通過OF判斷溢出,而無符號數(shù)通過進(jìn)位借位CF判斷溢出。
也就是說分整數(shù)加減法分為以下幾種情況:
(1)無符號整數(shù)加法
result=\left\{\begin{matrix} x+y & (x+y<2^n)&正常\\ x+y-2^n & (2^n\leq x+y<2^{n+1})&上溢出減去模 \end{matrix}\right.
(2)無符號整數(shù)減法
result=\left\{\begin{matrix} x-y & (x-y>0)&正常 \\ x-y+2^n &(x-y<0)& 下溢出加上模 \end{matrix}\right.
(3)有符號整數(shù)加法
result=\left\{\begin{matrix} x+y-2^n & (2^{n-1}\leq x+y) &正溢出\\ x+y & (-2^{n-1}\leq x+y<2^{n-1} ) &正常\\ x+y+2^n & (x+y<-2^{n-1}) &負(fù)溢出 \end{matrix}\right.
(4)有符號整數(shù)減法
result=\left\{\begin{matrix} x-y-2^n & (2^{n-1}\leq x+y) &正溢出\\ x- y & (-2^{n-1}\leq x-y<2^{n-1} ) &正常\\ x+y+2^n & (x-y< - 2^{n-1}) &負(fù)溢出 \end{matrix}\right.
由于在機(jī)器指令層面無符號和帶符號整數(shù)加減運(yùn)算不加區(qū)分,因而高級語言程序執(zhí)行過程中,帶符號整數(shù)隱式轉(zhuǎn)換為無符號整數(shù)運(yùn)算時會出現(xiàn)意想不到的錯誤。java為了避免這種情況發(fā)生,不支持無符號整數(shù)類型。

而對于整數(shù)乘除運(yùn)算分為如下情況:
(1)無符號整數(shù)乘法運(yùn)算
result=\left\{\begin{matrix} x * y & (x * y<2^n) &正常\\ x * y \mod 2^n & (x * y \geq 2^n) &溢出 \end{matrix}\right.
(2)有符號整數(shù)乘法運(yùn)算
由于此時采用專門的補(bǔ)碼乘法器運(yùn)算,采用Booth乘法或改進(jìn)的過的基4布斯乘法。能夠保證兩個n位補(bǔ)碼的乘積結(jié)果為其對應(yīng)的正確值的2n位補(bǔ)碼。通常此時判斷溢出的標(biāo)準(zhǔn)是:若高n位每一位都與低n位的最高位相同,則不溢出,否則溢出。如果要在程序中保證沒有溢出而產(chǎn)生的錯誤,可以根據(jù)p=x*y的關(guān)系來判斷:若x\neq 0 ,且p/x=y,則沒有發(fā)生溢出,否則溢出。
(3)整數(shù)除法
只有當(dāng)補(bǔ)碼代表的最小值

3.浮點(diǎn)數(shù)的編碼

浮點(diǎn)數(shù)的編碼采用符號位,階碼和尾數(shù)的結(jié)合。這里主要講一下應(yīng)用最廣泛的IEEE754標(biāo)準(zhǔn)。


image.png

image.png

image.png

下面逐條講解:
1.正負(fù)0
階碼和尾數(shù)全為0,符號位0或1,分別代表正0和負(fù)0,在不同情況下,有不同表現(xiàn)。比如對于C++和Java的float/double來說,認(rèn)為+0和-0是相等的。而對于Java的Double和Float認(rèn)為+0和-0不等。
2.無窮大量
階碼為最大(8位或11位全為1),尾數(shù)為0,符號位為0或1,分別表示
引入無窮大數(shù)使得計(jì)算過程中出現(xiàn)異常狀況下程序能繼續(xù)進(jìn)行下去,并為程序提供錯誤檢測功能。
在數(shù)值上大于所有有限數(shù),小于所有有限數(shù)。無窮大數(shù)既可作為操作數(shù)也可作為運(yùn)算結(jié)果,當(dāng)操作數(shù)為無窮大數(shù)時,有兩種處理方式:
(一)產(chǎn)生不發(fā)信號的非數(shù)NaN:如 等
(二)產(chǎn)生明確結(jié)果。如 等
3.非數(shù)NaN
NaN表示一個沒有定義的數(shù),符號位為0或1,階碼全為1,尾數(shù)不全為0。根據(jù)符號位后一位的值分為兩種情況:為1時,為靜止的NaN,當(dāng)運(yùn)算結(jié)果為此類數(shù)時,不發(fā)異常操作通知,即不觸發(fā)異常處理;為0時,為發(fā)信號的NaN,運(yùn)算結(jié)果為此類數(shù)時,觸發(fā)異常處理。對于一些沒有數(shù)學(xué)解釋的計(jì)算,如,求一個負(fù)數(shù)的平方根,等會產(chǎn)生一個非數(shù)NaN。同時NaN與任何數(shù)值作運(yùn)算,結(jié)果均為NaN。
4.規(guī)格化非0數(shù)
這是最常用的一類數(shù),階碼在1~254(單精度)和1~2046(雙精度)的數(shù),其在計(jì)算機(jī)內(nèi)計(jì)算公式在下面jvm規(guī)范里的圖內(nèi)。相當(dāng)于將十進(jìn)制數(shù)集合[-126,127]和[-1022,1023]分別雙射到[1,254]和[1,2046],在計(jì)算時需要將階碼代表的十進(jìn)制值減去127或1023。可以看到在一些追求精度的運(yùn)算中,普通單精度和雙精度是會產(chǎn)生誤差影響結(jié)果的。這里暫不討論單精度和雙精度的擴(kuò)展格式。如果需要更高精度,建議使用BigDecimal類。同時需要注意的是,==和!=判斷的標(biāo)準(zhǔn)是二進(jìn)制數(shù)是否完全一致,所以等號兩邊如果都是數(shù)值型字面量(且沒有進(jìn)行任何可能影響二進(jìn)制各位的操作),由于比較的依舊是常量池的存放的值,且沒有任何舍入操作,所以相等。例如如下代碼:

        float a=0.3f;
        double b=0.3;
        double c=0.4-0.1;
        System.out.println(a==(0.2f+0.1f));//true 單精度不夠?qū)⒉煌牟糠稚崛チ?        System.out.println(b==0.2+0.1);//false 雙精度足夠比較出不同的部分了
        System.out.println(0.3f==0.2f+0.1f);//true
        System.out.println(0.3d==0.2d+0.1d);//false
        System.out.println(b==c);//false

實(shí)際上比較a,b的值是否相等時,可以當(dāng)|a-b|<\epsilon時,判斷a和b相等。\epsilon是計(jì)算機(jī)定義的最小誤差值。

5.非規(guī)格化非0數(shù)
符號位0或1,階碼為0,尾數(shù)不全為0。可以看到它的計(jì)算公式是尾數(shù)部分是不需要加1的。而此時數(shù)的分布密度也從規(guī)格化的線性級變?yōu)榱顺?shù)級。

那么看完了IEEE754標(biāo)準(zhǔn)部分,看一下jvm的具體實(shí)現(xiàn)。以下是jvm虛擬機(jī)規(guī)范中對IEEE754中要求的部分改動:

image.png

image.png

可以看到j(luò)vm是把這些運(yùn)算異常生成默認(rèn)結(jié)果,同時在舍入時使用四舍五入的方式。注意 只有浮點(diǎn)數(shù),除以0,或者一個數(shù)除以0.0,才會得到正負(fù)無窮大,不然會拋出異常。
再看一下jvm對非數(shù)的表示是如何規(guī)定的:
image.png

也就是說非數(shù)的二進(jìn)制表示默認(rèn)是用4個值表示,如下(負(fù)的變一下符號位):

              System.out.println(Integer.toHexString(Float.floatToIntBits(1/0.0f)));
              System.out.println(Long.toHexString(Double.doubleToLongBits(1/0.0)));
    分別輸出:7f800000
             7ff0000000000000

最后著重看一下常量池里單精度浮點(diǎn)數(shù)是怎么存放的


image.png

顯然s存放符號位,通過算數(shù)右移(注意不能是邏輯右移,否則無法保留符號位)后比較獲得。
e是階碼,通過算術(shù)右移23位然后取掩碼獲得。
m是尾數(shù),先判斷階碼是否為0,為0時為非規(guī)格化數(shù),取掩碼獲得23位尾數(shù),然后左移一位是為了能夠與第二種情況對齊;不為0時為規(guī)格化數(shù),取掩碼獲得23位尾數(shù),通過或操作在23位數(shù)前加隱藏位1,之后通過公式計(jì)算(150=127+23,因?yàn)檫@里m不是1.XXX而是1XXX,所以需要在尾數(shù)上再減去23)

4.浮點(diǎn)數(shù)的舍入和運(yùn)算

由于浮點(diǎn)數(shù)無法精確表示所有數(shù)值,因此在存儲前必須對數(shù)值作舍入操作。具體分為5種舍入模式,這里只介紹最常用的也是IEEE754默認(rèn)的模式:
Round to nearest, ties to even(四舍五入至偶數(shù)模式)
舍入到最接近且可以表示的值,當(dāng)存在兩個數(shù)一樣接近時,取偶數(shù)值。(如2.4舍入為2,2.6舍入為3;2.5舍入為2,1.5舍入為2。)
Q:為什么會當(dāng)存在兩個數(shù)一樣接近時,取偶數(shù)值呢?
A:由于其他舍入方式均令結(jié)果單方向偏移,導(dǎo)致在運(yùn)算時出現(xiàn)較大的統(tǒng)計(jì)偏差。而采用這種偏移則50%的機(jī)會偏移兩端方向,從而減少偏差。

下面補(bǔ)充一個令人困惑的例子:

        double d = 0;

        for (int i = 1; i <= 10; i++) {
            d += 0.1;
            System.out.println(d);
            System.out.println(Long.toHexString(Double.doubleToLongBits(d)));
        }
輸出:
0.1
3fb999999999999a
0.2
3fc999999999999a
0.30000000000000004
3fd3333333333334
0.4
3fd999999999999a
0.5
3fe0000000000000
0.6
3fe3333333333333
0.7
3fe6666666666666
0.7999999999999999
3fe9999999999999
0.8999999999999999
3feccccccccccccc
0.9999999999999999
3fefffffffffffff

為什么產(chǎn)生如此效果,首先要知道由于十進(jìn)制和二進(jìn)制轉(zhuǎn)換的限制,十進(jìn)制浮點(diǎn)數(shù)是無法與二進(jìn)制浮點(diǎn)數(shù)形成雙射的(無論單雙精度)。IEEE754標(biāo)準(zhǔn)僅僅是規(guī)定了誤差舍入的精度。一個十進(jìn)制浮點(diǎn)數(shù)需要先轉(zhuǎn)換為一個二進(jìn)制數(shù)才能參與運(yùn)算,而運(yùn)算的結(jié)果還需要以十進(jìn)制數(shù)表示。這兩個步驟都會產(chǎn)生細(xì)微的誤差,所以導(dǎo)致以上出乎意料的結(jié)果。由于IEEE754標(biāo)準(zhǔn)的規(guī)定,在單雙精度而言,一個十進(jìn)制浮點(diǎn)數(shù),轉(zhuǎn)化為二進(jìn)制數(shù)時,其有效數(shù)字最多保留17位,更多位的數(shù)字是會被舍入的。理解了以上內(nèi)容后,再來看如下內(nèi)容。


image.png

可以看到對于計(jì)算機(jī)是可以保存多于17位的,但
注意到0.3是17位而其他是16位。這其實(shí)說明round-trip字符串會選擇最短的字符串~


image.png

這并不是0.1,0.2...0.9,1的真正轉(zhuǎn)化,這種計(jì)算的目的是保留到小數(shù)點(diǎn)后一位時仍然可以round-trip,比如0.3可以和0.299999999999999988897769753748434595763683319091796875相互轉(zhuǎn)化,只有0.30000000000000004才能和真實(shí)值round-trip。

也就是說一個二進(jìn)制浮點(diǎn)數(shù)運(yùn)算的結(jié)果是通過十進(jìn)制數(shù)round-trip來逼近這個結(jié)果,取其中最短的字符串,所以才造成了這個奇怪的現(xiàn)象。

4.非數(shù)值數(shù)據(jù)

邏輯數(shù)據(jù)只能進(jìn)行邏輯運(yùn)算,注意邏輯數(shù)據(jù)不一定只有1位。完全可以將一個n位數(shù)據(jù)看做由n個一位數(shù)據(jù)組成。在需要提取某一項(xiàng)或者進(jìn)行置位操作時,通過掩碼完成。(java中的boolean類型其實(shí)就是通過byte類型取最低位掩碼實(shí)現(xiàn)的)
字符類型首先介紹最常見的ASCII碼。它是用8位表示128個字符(最高位為保留位,可以作為奇偶校驗(yàn)值或其他用途)。比較值得注意的是在進(jìn)行大小字母轉(zhuǎn)換時,大小寫字母區(qū)別在于在從高位數(shù)第三位,這一位為0則是大寫字母,這一位為1則為小寫字母。所以在大小寫轉(zhuǎn)換和統(tǒng)計(jì)大小寫字母個數(shù)時,完全可以通過掩碼操作將這一位變換或者作為判斷條件。比如大小寫互換可以通過^0x20,統(tǒng)計(jì)小寫字母個數(shù)可以通過判斷&0x20!=0。
在ASCII碼之外還有GBK,UTF-8,UTF-16-UTF-32等等編碼,在有關(guān)編碼的文章進(jìn)行講解。

5.數(shù)據(jù)的存放和排列

數(shù)據(jù)的基本單位有比特(bit),字節(jié)(byte),此外還有一個特殊的:字(word)。字在不用種類計(jì)算機(jī)上會有很大區(qū)別。例如x86處理器把一個字定義為16位。而字長通常指cpu內(nèi)部用于整數(shù)運(yùn)算的數(shù)據(jù)通路的寬度。它的長度應(yīng)等于整數(shù)運(yùn)算的運(yùn)算器和通用寄存器寬度。說某種機(jī)器是32位或64位就是指字長。字和字長是兩個不同的概念。
值得注意的是,在表示容量時,用K表示1024,而在表示速度,距離,頻率時,用k表示1000。經(jīng)常使用的最小帶寬單位是以b而非B為基礎(chǔ)的。

下面來說一說存儲的排列方式。
由于大端法和小端法的區(qū)別,一般使用最低有效位和最高有效位來表示最低位和最高位。
大端法指數(shù)據(jù)的最高有效字節(jié)存放在小地址單元中,而小端法相反。例如假設(shè)變量x類型為int型,位于地址0x100的地方,其16進(jìn)制值為0x12345678,地址范圍為0x100到0x103字節(jié)。


image.png

這正好和我們平時書寫習(xí)慣一致,先書寫最高有效字節(jié),再依次寫其余字節(jié)。這是MIPS等指令機(jī)器采用的方式。

image.png

這是最常見的x86指令機(jī)器采用的方式。
需要注意的是計(jì)算機(jī)內(nèi)部采用的方式是一致的,但在系統(tǒng)間通信尤其是網(wǎng)絡(luò)通信時,必須注意相互轉(zhuǎn)換。此外,音頻視頻和圖像等文件格式或處理程序也涉及字節(jié)順序問題。同時在閱讀匯編程序時,也需要注意大端和小端的區(qū)別。
下面是一段C程序用來展示

#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, size_t len)
{
    size_t i;
    for (int i = 0; i < len; i++)
        printf(" %.2x", start[i]);
    printf("\n");
}

void show_int(int x)
{
    show_bytes((byte_pointer)&x, sizeof(int));
}

void show_float(float x)
{
    show_bytes((byte_pointer)&x, sizeof(float));
}
void show_pointer(void *x)
{
    show_bytes((byte_pointer)&x, sizeof(void *));
}

void test_show_bytes(int val)
{
    int ival = val;
    float fval = (float)ival;
    int *pval = &ival;
    show_int(ival);
    show_float(fval);
    show_pointer(pval);
    byte_pointer val1=(byte_pointer)&val;
    show_bytes(val1,1);
    show_bytes(val1,2);
    show_bytes(val1,3);
}

int main()
{
    int num = 0x123456;
    test_show_bytes(num);


    return 0;
}

輸出結(jié)果為:
 56 34 12 00
 b0 a2 91 49
 f4 fd 61 00 00 00 00 00
 56
 56 34
 56 34 12

可以看到同一個數(shù)據(jù),采用不同的方式去解讀會產(chǎn)生不同結(jié)果,在三次對show_bytes的調(diào)用分別接收到了
可以看到我使用的機(jī)器采用的是小端法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 信息的存儲 字?jǐn)?shù)據(jù)大小 計(jì)算機(jī)中,字長指的是指針數(shù)據(jù)標(biāo)稱大小,虛擬地址以字來進(jìn)行編碼的,所以字長w位的機(jī)器,可以表...
    Teech閱讀 826評論 0 0
  • 本章我們來研究三種重要的數(shù)字表示 無符號是基于傳統(tǒng)二進(jìn)制表示法,表示大于或等于0的數(shù)字 補(bǔ)碼是表示有符號整數(shù)的最常...
    程序員必修課閱讀 1,338評論 2 2
  • (萬尚學(xué)習(xí)會)打卡第105天 姓名:陸春菊 部門:財(cái)務(wù)部 組別:反省一組 【知~學(xué)習(xí)】 《京瓷哲學(xué)》001部分:第...
    陸春菊閱讀 232評論 0 0
  • 你是一盞燈, 一盞照亮前路的啟明燈, 當(dāng)我陷入黑暗的深淵, 是你把我又引領(lǐng)回正確的道路, 是你讓我重又見到光亮, ...
    貍歌_閱讀 1,032評論 0 5
  • Select* FROMtable1 Where(IDIN(3,5,1,4,2)) ORDERBYFIND_IN_...
    likohank閱讀 869評論 0 0

友情鏈接更多精彩內(nèi)容