亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

int難道不是占4個字節么?

然后那個取值范圍是怎么計算的呢?

正在回答

7 回答

恩,現在流行的編譯器,都是規定的int是四個字節~像tc這樣老版的編譯器,int才是兩個字節,然后也是一樣,由于一個字節占八位,最高為符號位,又人為規定,1000000000000000......這個補碼編碼為-2^31所以,范圍就是-2^31~2^31-1

1 回復 有任何疑惑可以回復我~
#1

小池的呆妞 提問者

非常感謝!康薩拉米大~
2015-01-18 回復 有任何疑惑可以回復我~
#2

小池的呆妞 提問者

問問浮點型數據的取值范圍又是怎么回事呢
2015-01-18 回復 有任何疑惑可以回復我~
#3

Fiona0126 回復 小池的呆妞 提問者

額。。由于浮點型的存儲方式不一樣,所以算起來有點復雜~它是參照IEEE754標準的,分為三個部分存儲,一個是符號位部分,一個是階碼部分,一個尾數部分,拿float舉例,它三部分的占得位數分別是1 8 23,所以我就大概說一下取值是怎么算的,具體你百度查吧,比較長~float的取值就是-2^(2^7-1)*2~2~~~2^(2^7-1)*2
2015-01-18 回復 有任何疑惑可以回復我~
#4

火Rain

——這里關于int(4字節)的取值范圍由來(-2^31~2^31-1)我補充一下: 1.一個4字節占8位,所以總共是32位,然后去掉第一位,也即符號位(1:負,0:正),也就剩下31位! 2.所以最小值為:-2^31,最大值為2^31,然后去掉0(0000....0000)也即2^31-1! 3.所以最后得出的范圍是:-2^31~2^31-1?。ㄕ龜档姆秶话?) (注:是這樣么,求批評指正?。?/div>
2015-02-28 回復 有任何疑惑可以回復我~
#5

Fiona0126 回復 火Rain

不是因為去掉0.。而是它本身的最大值就是2^31-1。而不是你說的2^31。 我們不考慮那么多位,假設只有三位,其中首位為符號位的話,最大值的情況不就是011嗎?32位的時候同理啊, 01111111 11111111 11111111 11111111 //而這個數表示的值就是2^31-1.
2015-02-28 回復 有任何疑惑可以回復我~
#6

火Rain 回復 Fiona0126

為什么2^(2^((8-1)-1))*2 我用計算器得到的答案是:3.689349e19? 是這樣計算其取值范圍的嗎?
2015-03-03 回復 有任何疑惑可以回復我~
#7

火Rain 回復 Fiona0126

最大值是(2^31)-1 問題來了,好像是這樣啊 那為什么最小值 卻是-2^31?不減一?
2015-03-03 回復 有任何疑惑可以回復我~
#8

火Rain 回復 Fiona0126

是不是因為這個二進制補碼:二進制補碼在計算機中比較常用,當表示負數的時候,在原來原碼的基礎上再加1
2015-03-03 回復 有任何疑惑可以回復我~
#9

Fiona0126 回復 火Rain

第一個問題,(2^(2^(8-1)-1))*2化簡之后其實就是(2^(2^7)) 第二個問題,因為數據是由二進制補碼存儲的。而正數的補碼跟原碼相同。而負數則是原碼取反+1。。 但是有個100000000{省略若干0}的存在。這個數字在原碼中表示的是-0,而00000000{。。。}在原碼中表示的是0 但是由于是補碼存儲的關系。將1000000{。。}取反+1.。又變成了0000000{。。。}。既然這樣。。就人為規定了10000{。。。}這個編碼為-2^31
2015-03-03 回復 有任何疑惑可以回復我~
#10

火Rain 回復 Fiona0126

感謝!
2015-03-04 回復 有任何疑惑可以回復我~
#11

火Rain 回復 Fiona0126

取反加1 是在最末尾加1,比如 原碼10011,反碼為11100,補碼為11101! 我對第二個問題的答案并不認同!請大大指教下我所作的關于int范圍的總結,在回答當中!
2015-03-05 回復 有任何疑惑可以回復我~
查看8條回復

——關于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>

0 回復 有任何疑惑可以回復我~


計算機是按二進制方式存儲數據的,在計算機中表示整型數據有以下幾種方法: ? ? ? ?

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>

1 回復 有任何疑惑可以回復我~

這個問題,很贊的說,路過學習!

0 回復 有任何疑惑可以回復我~

不是,占2個字節


0 回復 有任何疑惑可以回復我~

學習了?

0 回復 有任何疑惑可以回復我~

2個字節 1字節 = 8bit so。。。。

0 回復 有任何疑惑可以回復我~
#1

小池的呆妞 提問者

char 1個字節float 4個字節double 8個字節int分為long int和short int,其中long int是4個字節,short int是2個字節在vc編譯器中int默認是long int,因此int在vc6.0里面是4個字節 我記得我們老師是這樣講的,腫么回事?
2015-01-18 回復 有任何疑惑可以回復我~
#2

dire 回復 小池的呆妞 提問者

這個不是統一規定的 是根據個人的編譯器 CPU來規定的 你可以寫代碼在你的編譯器里面判斷 你的各個數據類型所占的字節 這個可以百度一下 c語言中的 sizeof()函數
2015-05-22 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C語言入門
  • 參與學習       926904    人
  • 解答問題       21532    個

C語言入門視頻教程,帶你進入編程世界的必修課-C語言

進入課程

int難道不是占4個字節么?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號