• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            cc

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              38 隨筆 :: 14 文章 :: 21 評(píng)論 :: 0 Trackbacks
            大家都知道數(shù)據(jù)在計(jì)算機(jī)中都是按字節(jié)來(lái)儲(chǔ)存了,1個(gè)字節(jié)等于8位(1Byte=8bit),而計(jì)算機(jī)只能識(shí)別0和1這兩個(gè)數(shù),所以根據(jù)排列,1個(gè)字節(jié)能代表256種不同的信息,即28(0和1兩種可能,8位排列),比如定義一個(gè)字節(jié)大小的無(wú)符號(hào)整數(shù)(unsigned char),那么它能表示的是0~255(0~28-1)這些數(shù),一共是256個(gè)數(shù),因?yàn)椋懊嬲f(shuō)了,一個(gè)字節(jié)只能表示256種不同的信息。別停下,還是一個(gè)字節(jié)的無(wú)符號(hào)整數(shù),我們來(lái)進(jìn)一步剖析它,0是這些數(shù)中最小的一個(gè),我們先假設(shè)它在計(jì)算機(jī)內(nèi)部就用8位二進(jìn)制表示為00000000(從理論上來(lái)說(shuō)也可以表示成其他不同的二進(jìn)制碼,只要這256個(gè)數(shù)每個(gè)數(shù)對(duì)應(yīng)的二進(jìn)制碼都不相同就可以了),再假設(shè)1表示為00000001,2表示為00000010,3 表示為00000011,依次類推,那么最大的那個(gè)數(shù)255在8位二進(jìn)制中就表示為最大的數(shù)11111111,然后,我們把這些二進(jìn)制碼換算成十進(jìn)制看看,會(huì)發(fā)現(xiàn)剛好和我們假設(shè)的數(shù)是相同的,而事實(shí)上,在計(jì)算機(jī)中,無(wú)符號(hào)的整數(shù)就是按這個(gè)原理來(lái)儲(chǔ)存的,所以告訴你一個(gè)無(wú)符號(hào)的整數(shù)的二進(jìn)制碼,你就可以知道這個(gè)數(shù)是多少,而且知道在計(jì)算機(jī)中,這個(gè)數(shù)本身就是以這個(gè)二進(jìn)制碼來(lái)儲(chǔ)存的。比如我給你一個(gè)2個(gè)字節(jié)大小的二進(jìn)制碼,首先聲明它表示的是無(wú)符號(hào)的整數(shù): 00000000 00000010,我們把前面的0省略,換算一下,它表示的也是數(shù)值2,和前面不同的是,它占了2個(gè)字節(jié)的內(nèi)存。不同的類型占的內(nèi)存空間不同,如在我的電腦中char是1個(gè)字節(jié),int是4個(gè)字節(jié),long是8個(gè)字節(jié)(你的可能不同,這取決于不同的計(jì)算機(jī)設(shè)置),它們的不同之處僅僅是內(nèi)存大的能表示的不同的信息多些,也就是能表示的數(shù)范圍更大些(unsigned int能表示的范圍是0~28*4-1),至于怎么算,其實(shí)都是一樣的,直接把二進(jìn)制與十進(jìn)制相互轉(zhuǎn)換,二進(jìn)制就是它在計(jì)算機(jī)中的樣子,十進(jìn)制就是我們所表示的數(shù)。啊哈,原來(lái)這些都是可以計(jì)算的呀,我曾經(jīng)還以為不同的計(jì)算機(jī)儲(chǔ)存的原理是不同的,取決于商家的喜好呢,呵呵。說(shuō)了這么多怎么還沒(méi)有提到原碼、反碼和補(bǔ)碼呀,別急別急,心急吃不了熱豆腐,呵呵,因?yàn)闊o(wú)符號(hào)的整數(shù)根本就沒(méi)有原碼、反碼和補(bǔ)碼。(啊,那不是被欺騙了,5555````我告訴媽媽去,哥哥欺負(fù)我)都說(shuō)了別急嘛,你就不想想我說(shuō)了這么半天的無(wú)符號(hào)整數(shù),那么有符號(hào)的整數(shù)怎么辦啊?

            呵呵,對(duì),只有有符號(hào)的整數(shù)才有原碼、反碼和補(bǔ)碼的!其他的類型一概沒(méi)有。雖然我們也可以用二進(jìn)制中最小的數(shù)去對(duì)應(yīng)最小的負(fù)數(shù),最大的也相對(duì)應(yīng),但是那樣不科學(xué),下面來(lái)說(shuō)說(shuō)科學(xué)的方法。還是說(shuō)一個(gè)字節(jié)的整數(shù),不過(guò)這次是有符號(hào)的啦,1個(gè)字節(jié)它不管怎么樣還是只能表示256個(gè)數(shù),因?yàn)橛蟹?hào)所以我們就把它表示成范圍:-128-127。它在計(jì)算機(jī)中是怎么儲(chǔ)存的呢?可以這樣理解,用最高位表示符號(hào)位,如果是0表示正數(shù),如果是1表示負(fù)數(shù),剩下的7位用來(lái)儲(chǔ)存數(shù)的絕對(duì)值的話,能表示27個(gè)數(shù)的絕對(duì)值,再考慮正負(fù)兩種情況,27*2還是256個(gè)數(shù)。首先定義0在計(jì)算機(jī)中儲(chǔ)存為00000000,對(duì)于正數(shù)我們依然可以像無(wú)符號(hào)數(shù)那樣換算,從00000001到01111111依次表示1到127。那么這些數(shù)對(duì)應(yīng)的二進(jìn)制碼就是這些數(shù)的原碼。到這里很多人就會(huì)想,那負(fù)數(shù)是不是從10000001到11111111依次表示-1到-127,那你發(fā)現(xiàn)沒(méi)有,如果這樣的話那么一共就只有255個(gè)數(shù)了,因?yàn)?0000000 的情況沒(méi)有考慮在內(nèi)。實(shí)際上,10000000在計(jì)算機(jī)中表示最小的負(fù)整數(shù),就是這里的-128,而且實(shí)際上并不是從10000001到11111111 依次表示-1到-127,而是剛好相反的,從10000001到11111111依次表示-127到-1。負(fù)整數(shù)在計(jì)算機(jī)中是以補(bǔ)碼形式儲(chǔ)存的,補(bǔ)碼是怎么樣表示的呢,這里還要引入另一個(gè)概念——反碼,所謂反碼就是把負(fù)數(shù)的原碼(負(fù)數(shù)的原碼和和它的絕對(duì)值所對(duì)應(yīng)的原碼相同,簡(jiǎn)單的說(shuō)就是絕對(duì)值相同的數(shù)原碼相同)各個(gè)位按位取反,是1就換成0,是0就換成1,如-1的原碼是00000001,和1的原碼相同,那么-1的反碼就是11111110,而補(bǔ)碼就是在反碼的基礎(chǔ)上加1,即-1的補(bǔ)碼是11111110+1=11111111,因此我們可以算出-1在計(jì)算機(jī)中是按11111111儲(chǔ)存的。總結(jié)一下,計(jì)算機(jī)儲(chǔ)存有符號(hào)的整數(shù)時(shí),是用該整數(shù)的補(bǔ)碼進(jìn)行儲(chǔ)存的,0的原碼、補(bǔ)碼都是0,正數(shù)的原碼、補(bǔ)碼可以特殊理解為相同,負(fù)數(shù)的補(bǔ)碼是它的反碼加1。下面再多舉幾個(gè)例子,來(lái)幫助大家理解!

            十進(jìn)制 → 二進(jìn)制 (怎么算?要是不知道看計(jì)算機(jī)基礎(chǔ)的書(shū)去)
            47 → 101111

            有符號(hào)的整數(shù) 原碼 反碼 補(bǔ)碼
            47 00101111 11010000 00101111(正數(shù)補(bǔ)碼和原碼相同)
            -47 00101111 11010000 11010001(負(fù)數(shù)補(bǔ)碼是在反碼上加1)

            再舉個(gè)例子,學(xué)C語(yǔ)言的同學(xué)應(yīng)該做過(guò)這道題:
            把-1以無(wú)符號(hào)的類型輸出,得什么結(jié)果?(程序如下)

            #include<iostream.h>
            void main()
            {
            short int n=-1;
            cout<<(unsigned short int)n<<endl;
            }

            首先在我的電腦中short int類型的儲(chǔ)存空間是2個(gè)字節(jié),你的可能不同,我說(shuō)過(guò),這取決于你的計(jì)算機(jī)配置。它能儲(chǔ)存28*2=65536個(gè)不同的數(shù)據(jù)信息,如果是無(wú)符號(hào)那么它的范圍是0~65535(0~216-1),如果是有符號(hào),那么它的范圍是-32768~32767(-215~215-1)。這道題目中,開(kāi)始n是一個(gè)有符號(hào)的短整型變量,我們給它賦值為-1,根據(jù)我們前面所說(shuō)的,它在計(jì)算機(jī)中是以補(bǔ)碼11111111 11111111儲(chǔ)存的,注意前面說(shuō)了是2個(gè)字節(jié)。如果把它強(qiáng)制為無(wú)符號(hào)的短整型輸出的話,那么我們就把剛才的二進(jìn)制把看成無(wú)符號(hào)的整型在計(jì)算機(jī)中儲(chǔ)存的形式,對(duì)待無(wú)符號(hào)的整型就沒(méi)有什么原碼、反碼和補(bǔ)碼的概念了,直接把11111111 11111111轉(zhuǎn)化成十進(jìn)制就是65535,其實(shí)我們一看都是一就知道它是范圍中最大的一個(gè)數(shù)了。呵呵,就這么簡(jiǎn)單。你個(gè)把上面的源代碼編譯運(yùn)行看看,如果你的電腦short int也是兩個(gè)字節(jié),那就會(huì)和我得一樣的結(jié)果。你可以先用這個(gè)語(yǔ)句看看:cout<<sizeof(short int)<<endl;看看你的電腦里的短整型占多少的儲(chǔ)存空間,也可以用sizeof來(lái)看其它任何類型所分配的儲(chǔ)存空間。

            最后提醒一句,關(guān)于數(shù)據(jù)如何在計(jì)算機(jī)中儲(chǔ)存的,這里只適用于整型的數(shù)據(jù),對(duì)于浮點(diǎn)型的是另一種方式,這里我們暫時(shí)就不深究了
            posted on 2010-03-17 01:16 醒目西西 閱讀(281) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99久久精品日本一区二区免费| 性做久久久久久久久久久| 性做久久久久久久| 精品一区二区久久| 久久精品免费大片国产大片| 亚洲色欲久久久久综合网| 99精品国产99久久久久久97| 国产精品九九九久久九九| 国内精品久久久久久不卡影院| 久久精品国产久精国产果冻传媒 | 一级a性色生活片久久无| 亚洲精品午夜国产VA久久成人| 丁香五月网久久综合| 一级做a爰片久久毛片看看| 久久发布国产伦子伦精品| 青青草国产97免久久费观看| 国产精品久久网| 无码人妻精品一区二区三区久久久| 日本福利片国产午夜久久| 色综合久久久久无码专区| 亚洲色欲久久久久综合网| 精品久久久久久无码中文字幕| 无码日韩人妻精品久久蜜桃 | 久久久久久av无码免费看大片| 国产午夜精品久久久久免费视| 久久天天婷婷五月俺也去| 久久久久亚洲AV无码专区桃色| 久久精品中文无码资源站 | 精品久久人妻av中文字幕| 伊人久久大香线蕉av不卡| 久久99热这里只频精品6| 久久亚洲av无码精品浪潮| 欧美午夜精品久久久久久浪潮| 国产毛片久久久久久国产毛片| 国产成人无码精品久久久久免费| 国内精品久久久久久野外| 久久综合九色综合久99| 久久99毛片免费观看不卡| 色综合久久88色综合天天| 欧美综合天天夜夜久久| 精品久久久久一区二区三区 |