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