課程
/后端開(kāi)發(fā)
/C
/C語(yǔ)言入門
然后那個(gè)取值范圍是怎么計(jì)算的呢?
2015-01-18
源自:C語(yǔ)言入門 2-4
正在回答
恩,現(xiàn)在流行的編譯器,都是規(guī)定的int是四個(gè)字節(jié)~像tc這樣老版的編譯器,int才是兩個(gè)字節(jié),然后也是一樣,由于一個(gè)字節(jié)占八位,最高為符號(hào)位,又人為規(guī)定,1000000000000000......這個(gè)補(bǔ)碼編碼為-2^31所以,范圍就是-2^31~2^31-1
小池的呆妞 提問(wèn)者
Fiona0126 回復(fù) 小池的呆妞 提問(wèn)者
火Rain
Fiona0126 回復(fù) 火Rain
火Rain 回復(fù) Fiona0126
——關(guān)于int(4字節(jié))的取值范圍由來(lái)(-2^31~2^31-1)?1.【32位】一個(gè)字節(jié)占8位,所以4字節(jié)總共是占32位,然后去掉第一位,也即符號(hào)位(1:負(fù),0:正),也就剩下31位!2.【最大值:2^31-1】為什么不是2^31?(1)假設(shè)只有三位,其中首位為符號(hào)位的話,最大值的情況不就是011嗎?也即表示3.3 = 2^(3-1)-1.(2)32位的時(shí)候同理,01111111 11111111 11111111 11111111 //而這個(gè)數(shù)表示的值就是2^31-1.2^31-1 = 2^(32-1)-1.3.【最小值:-2^31】為什么不是-(2^31-1)?(1)因?yàn)閿?shù)據(jù)是由二進(jìn)制補(bǔ)碼存儲(chǔ)的:1)當(dāng)原碼為正數(shù)的時(shí)候,正數(shù)的原碼反碼補(bǔ)碼都相同,即00011的反碼也為00011,補(bǔ)碼也為00011.2)當(dāng)原碼為負(fù)數(shù)的時(shí)候,反碼即按位取反,比如10011為原碼,10011可表示-3,那么符號(hào)位不變,其余位按位取反即反碼11100.那么10011的補(bǔ)碼便是11101.(2)所以可知int所取的最小值原碼為:11111111 11111111 11111111 11111111.它的反碼為:10000000 00000000 00000000 00000000. (在原碼中表示-0.)它的補(bǔ)碼為:10000000 00000000 00000000 00000001. (在原碼中表示-1.)依次可以類推-2,-3,-4......-2^31!【推到-2^31】其原碼為10000000 00000000 00000000 00000001?其反碼為11111111 11111111 11111111 11111110其補(bǔ)碼為11111111 11111111 11111111 11111111從上可知最小值只能表示到-2^31,而無(wú)法表示到更小的一位:-2^31-1!4.【綜上所訴,int(4字節(jié))范圍是:-2^31~2^31-1】!(自己對(duì)于這個(gè)問(wèn)題也糾結(jié)了很久,得出的結(jié)論若有不足之處,敬請(qǐng)批評(píng)指正,謝謝?。?/p>
計(jì)算機(jī)是按二進(jìn)制方式存儲(chǔ)數(shù)據(jù)的,在計(jì)算機(jī)中表示整型數(shù)據(jù)有以下幾種方法: ? ? ? ?
1.二進(jìn)制補(bǔ)碼:二進(jìn)制補(bǔ)碼在計(jì)算機(jī)中比較常用,當(dāng)表示負(fù)數(shù)的時(shí)候,在原來(lái)原碼的基礎(chǔ)上再加1
2.二進(jìn)制反碼:二進(jìn)制反碼是簡(jiǎn)單地把正數(shù)取反就是對(duì)應(yīng)的負(fù)數(shù)了,比如00000001為1,11111110為-1 ? ? ?
3.偏移表示法:?偏移表示法用一個(gè)數(shù)與它相減就得到所需的數(shù) ? ? ? ? ?
4.帶符號(hào)的數(shù)表示法:最高有效位是符號(hào)位,1為負(fù),0為正。比如:00000001為1,10000001為-1
注:正數(shù)的原碼反碼補(bǔ)碼都相同,即0011的反碼也為0011 ?
舉例來(lái)說(shuō):對(duì)于正數(shù)3,其二進(jìn)制形式為 0011,我們把 0011稱為真值,在計(jì)算機(jī)中用0或1表示正負(fù)號(hào),那么 0011在計(jì)算機(jī)中原碼可以表示為00011(第一位為符號(hào)位)。反碼補(bǔ)碼不變。
對(duì)于負(fù)數(shù),反碼即按位取反,比如10011可表示-3,10011為原碼,那么符號(hào)位不變,其余位按位取反即反碼11100. ?補(bǔ)碼的存在是為了簡(jiǎn)化計(jì)算的,其符號(hào)位一起參加運(yùn)算,從而對(duì)于減法可轉(zhuǎn)化為加法。補(bǔ)碼的實(shí)質(zhì)就是mod2。比如我們的鐘表是mod12的,那么14點(diǎn)鐘我們也可以說(shuō)是下午2點(diǎn)。獲得補(bǔ)碼的方法是“按位取反,末位加1”那么10011的補(bǔ)碼便是11101.。。。。。。。。。。 ?
機(jī)器數(shù)即數(shù)值在計(jì)算機(jī)中的表示形式。 ?
(注:以上是本人查找整理的有關(guān)原碼、反碼和補(bǔ)碼的知識(shí),惡補(bǔ)一下自己的儲(chǔ)量!若有不足之處,請(qǐng)大大們批評(píng)指正,感謝?。?/p>
這個(gè)問(wèn)題,很贊的說(shuō),路過(guò)學(xué)習(xí)!
不是,占2個(gè)字節(jié)
學(xué)習(xí)了?
2個(gè)字節(jié) 1字節(jié) = 8bit so。。。。
dire 回復(fù) 小池的呆妞 提問(wèn)者
舉報(bào)
C語(yǔ)言入門視頻教程,帶你進(jìn)入編程世界的必修課-C語(yǔ)言
2 回答一個(gè)int是占4個(gè)字節(jié)的
4 回答int型占幾個(gè)字節(jié)?
1 回答int 的占字節(jié)數(shù)
2 回答int所占字節(jié)數(shù)
3 回答整型256占幾個(gè)字節(jié)?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-01-18
恩,現(xiàn)在流行的編譯器,都是規(guī)定的int是四個(gè)字節(jié)~像tc這樣老版的編譯器,int才是兩個(gè)字節(jié),然后也是一樣,由于一個(gè)字節(jié)占八位,最高為符號(hào)位,又人為規(guī)定,1000000000000000......這個(gè)補(bǔ)碼編碼為-2^31所以,范圍就是-2^31~2^31-1
2015-03-05
——關(guān)于int(4字節(jié))的取值范圍由來(lái)(-2^31~2^31-1)?
1.【32位】一個(gè)字節(jié)占8位,所以4字節(jié)總共是占32位,然后去掉第一位,也即符號(hào)位(1:負(fù),0:正),也就剩下31位!
2.【最大值:2^31-1】為什么不是2^31?
(1)假設(shè)只有三位,其中首位為符號(hào)位的話,最大值的情況不就是011嗎?也即表示3.
3 = 2^(3-1)-1.
(2)32位的時(shí)候同理,01111111 11111111 11111111 11111111 //而這個(gè)數(shù)表示的值就是2^31-1.
2^31-1 = 2^(32-1)-1.
3.【最小值:-2^31】為什么不是-(2^31-1)?
(1)因?yàn)閿?shù)據(jù)是由二進(jìn)制補(bǔ)碼存儲(chǔ)的:
1)當(dāng)原碼為正數(shù)的時(shí)候,正數(shù)的原碼反碼補(bǔ)碼都相同,即00011的反碼也為00011,補(bǔ)碼也為00011.
2)當(dāng)原碼為負(fù)數(shù)的時(shí)候,反碼即按位取反,比如10011為原碼,10011可表示-3,那么符號(hào)位不變,其余位按位取反即反碼11100.那么10011的補(bǔ)碼便是11101.
(2)所以可知int所取的最小值原碼為:11111111 11111111 11111111 11111111.
它的反碼為:10000000 00000000 00000000 00000000. (在原碼中表示-0.)
它的補(bǔ)碼為:10000000 00000000 00000000 00000001. (在原碼中表示-1.)
依次可以類推-2,-3,-4......-2^31!
【推到-2^31】
其原碼為10000000 00000000 00000000 00000001?
其反碼為11111111 11111111 11111111 11111110
其補(bǔ)碼為11111111 11111111 11111111 11111111
從上可知最小值只能表示到-2^31,而無(wú)法表示到更小的一位:-2^31-1!
4.【綜上所訴,int(4字節(jié))范圍是:-2^31~2^31-1】!
(自己對(duì)于這個(gè)問(wèn)題也糾結(jié)了很久,得出的結(jié)論若有不足之處,敬請(qǐng)批評(píng)指正,謝謝?。?/p>
2015-02-28
計(jì)算機(jī)是按二進(jìn)制方式存儲(chǔ)數(shù)據(jù)的,在計(jì)算機(jī)中表示整型數(shù)據(jù)有以下幾種方法: ? ? ? ?
1.二進(jìn)制補(bǔ)碼:二進(jìn)制補(bǔ)碼在計(jì)算機(jī)中比較常用,當(dāng)表示負(fù)數(shù)的時(shí)候,在原來(lái)原碼的基礎(chǔ)上再加1
2.二進(jìn)制反碼:二進(jìn)制反碼是簡(jiǎn)單地把正數(shù)取反就是對(duì)應(yīng)的負(fù)數(shù)了,比如00000001為1,11111110為-1 ? ? ?
3.偏移表示法:?偏移表示法用一個(gè)數(shù)與它相減就得到所需的數(shù) ? ? ? ? ?
4.帶符號(hào)的數(shù)表示法:最高有效位是符號(hào)位,1為負(fù),0為正。比如:00000001為1,10000001為-1
注:正數(shù)的原碼反碼補(bǔ)碼都相同,即0011的反碼也為0011 ?
舉例來(lái)說(shuō):對(duì)于正數(shù)3,其二進(jìn)制形式為 0011,我們把 0011稱為真值,在計(jì)算機(jī)中用0或1表示正負(fù)號(hào),那么 0011在計(jì)算機(jī)中原碼可以表示為00011(第一位為符號(hào)位)。反碼補(bǔ)碼不變。
對(duì)于負(fù)數(shù),反碼即按位取反,比如10011可表示-3,10011為原碼,那么符號(hào)位不變,其余位按位取反即反碼11100. ?補(bǔ)碼的存在是為了簡(jiǎn)化計(jì)算的,其符號(hào)位一起參加運(yùn)算,從而對(duì)于減法可轉(zhuǎn)化為加法。補(bǔ)碼的實(shí)質(zhì)就是mod2。比如我們的鐘表是mod12的,那么14點(diǎn)鐘我們也可以說(shuō)是下午2點(diǎn)。獲得補(bǔ)碼的方法是“按位取反,末位加1”那么10011的補(bǔ)碼便是11101.。。。。。。。。。。 ?
機(jī)器數(shù)即數(shù)值在計(jì)算機(jī)中的表示形式。 ?
(注:以上是本人查找整理的有關(guān)原碼、反碼和補(bǔ)碼的知識(shí),惡補(bǔ)一下自己的儲(chǔ)量!若有不足之處,請(qǐng)大大們批評(píng)指正,感謝?。?/p>
2015-02-28
這個(gè)問(wèn)題,很贊的說(shuō),路過(guò)學(xué)習(xí)!
2015-01-23
不是,占2個(gè)字節(jié)
2015-01-18
學(xué)習(xí)了?
2015-01-18
2個(gè)字節(jié) 1字節(jié) = 8bit so。。。。