1樓:聽不清啊
8!= 40320
如果用int 型別來存放階乘的答案的話,由於它超過了16位整型數能表示的最大值32767,所以就發生了資料的「溢位」。所以答案就出錯了。
這時,只要採用大一點的 long 型別(只是修改用來表示階乘的變數的型別就可以了),就可以避免發生這樣的問題。
2樓:木瓊玥
while(i<=8)中 要求 i必須小於8
所以大於8就不行了
3樓:
我執行的沒錯啊!結果是40320. 9!也沒錯的。
4樓:匿名使用者
執行出來是正常的啊。
5樓:於興昌邵夫
一般情況下,int都差不多是4個位元組的,也就是說最大能放的數是2的32次方,當你要存放的資料大於這個結果時,系統就會將高位捨棄,也就是常說的資料溢位,而你的m要存放的是17的階乘,已經遠大於該資料了,因此出錯也是難免的了!希望可以幫到你,本人知道的不多,如果說法有誤的話請指正!
6樓:匿名使用者
c語言int資料型別的範圍
在記憶體中分配2個位元組 也就16位的二進位制
-32768 ~~到~~32767
二進位制數在計算機記憶體儲的是其補碼
對於有符號數,正數的補碼和本身一樣,負數的補碼是本身的數字位取反後加1
比如:1=(0001)補=(0001)
-1=(1001)補=(1111)
計算機儲存-1就是儲存的1111
因此當int表示範圍為16位時,可以表示的最大負數為:
10000...0000(後面有15個0)相當於-0
但這其實是-32768=110000...0000(第一位符號位,後面有15個0)的補碼錶示
可以理解為16位的int足可以表示-32768的補碼當數值如8!>32767時會很自然的往高位進1,這時最高位為1最高位為1,如前面所言,系統裡識別是為負數。
當算到10!的時候繼續進位,最高位為0,自又為正數了但是無論你怎麼算你得到的結果都永遠不會大於32767除非t改用float型,或者double型
在c語言中怎麼表示負數。
7樓:鄲任謝鑫
第一位符號位1為負,0為正。
正數的補碼和2進位制原碼是一樣的。
負數的補碼:
1、先取絕對值|x|
;2、對|x|+1
;3、對|x|+1
取反,就得到它的補碼了
。計算機中存放整型資料都是按補碼的形式存放的。
擴充套件資料:
有符號數的表示方法是由硬體決定,而不是由c決定的。有三種表示方法:
1、二進位制原碼
0000
0001 表示1
1000
0001
表示-1
這個方法有個缺點是有兩個零:+0和
-0。這會引起混淆,而且用兩個位組合來表示一個值也有些浪費。
2、二進位制補碼(最普遍的系統)
區別在於
singned
和unsigned:
1)如果是無符號位元組,
1000
0000
該組合為
1282)如果是有符號位元組,
1000
0000
該組合為
-128
第一種表示數的範圍是0~
255;
第二種表示數的範圍是
-128
~+127,對於一個二進位制補碼數取負數,最簡單的方法就是取反、加1。3、二進位制反碼
通過反轉位組合中的每一位以形成一個數的負數,例如:
0000
0001 表示1
1111
1110
表示-1
這種方式也有一個
-0:1111
1111。其範圍是
-127
~+127。
8樓:都谷芹由銳
資料型別是有符號型別,負數就和數學裡的負數一樣。int
的取值範圍是-32768~32767,只要不越界就行
9樓:抗新覺宮濤
1.負數在現代計算機裡一般用補碼錶示,為什麼呢?原因是:保證0的左右不矛盾
1是0001,推算出0是0000;
-1的是1111,推算出0也是0000。
如果直接用反碼(0變成1,1變成0)那麼0就會有兩個結果。
如果用第一位表示符號,後三位表示大小,那麼就有空間浪費。
2.char型別是8位,1000
0000還原為原碼:
最高位是1,表示負數,剩餘的各位取反
1111111
再+1得到
1000
0000,
+128的原碼,整個數為-128
求採納為滿意回答。
10樓:乜靈波緱熙
就直接寫啊,
舉個例子啊:
inta
=19;
intb
=0-a;
這裡b就是負數了,0-19就是
-19了。
請問c語言是怎麼計算負數取餘的?
11樓:會飛的小兔子
c語言計算負數取餘:符號內的被除數決定,就是計算式中的-7,7,-7決定:比如-7%5=-2;
7%-5=2;
-7%-5=-2;
負數取餘的原理:
任何一個整數n都可以表示成n=k*q+r其中0<=|r|<|q|這裡的r就是n除以q的餘數,即r==n%q例如:-9=(-2)*4+(-1)則-9除以4的餘數為-1。
求餘:取整除後的餘數。
求模:基本意義和求餘相同,不過要求a%b中的b不是負數。
擴充套件資料
c語言除法運算子「/」和求餘運算子「%」
除法運算子「/」。二元運算子,具有左結合性。參與運算的量均為整型時,結果為整型,捨去小數。如果運算量中有一個為實型,結果為雙精度實型。
例如:5/2=2,1/2=0
5/2.0=2.5
求餘運算子「%」,二元運算子,具有左結合性。參與運算的量均為整型。求餘運算的結果等於兩個數相除後的餘數。
12樓:匿名使用者
簡單的說,先全都當正數取餘,然後在結果前面新增被除數的符號即可。比如問的-18%5就相當於18%5得到3,再添上「-」號,結果就是-3。
下面看具體的:
a%b = a - a/b*b
注意,這是c語言中的取餘,和電腦科學以及數學中定義的求模是有區別的。這裡的a,b都必須是整形。其中a/b是去尾運算而不是四捨五入。
對於有人問-7%5 = 3,那應該不是用的c語言取餘了,可能是python或者其他語言,按照電腦科學中取模的定義-7 mod 5的結果才是3。取模的定義就不多說了。今天正好對這方面產生了一點疑惑,我寫的解釋都是經過資料查詢和親自試驗的結論。
希望能幫到有同樣疑惑的人。
13樓:匿名使用者
汗,ls竟然還有說通過實驗驗證的,考試時有電腦嗎。。。
其是由符號內的被除數決定,也就是下例中的-7,7,-7決定比如-7%5 = -2;
7%-5 = 2;
-7%-5 = -2;
14樓:素朗劍琳怡
也就是下例中的-7。;7%-5
15樓:雲揚雲悠
和正數一樣的,還是採用下變數賦值,編出求餘的小程式,然後輸入你想輸的數,看結果啦。
自己去親自操作一下吧,別人把答案直接告訴你就達不到學習的目的了。
16樓:匿名使用者
自己實驗一下就知道了啊?為什麼非要問別人呢?
17樓:匿名使用者
對符號位進行異或運算,再把數值位按正數除法算吧,猜的,hoho
c語言怎麼輸出結果為負數的小數,比如-8/3怎麼讓它顯示出是一個負數的小數?
18樓:匿名使用者
用float浮點型輸出即可
19樓:匿名使用者
printf("%f",-(float)8/(float)3);
c語言中負數如何表示?
20樓:風若遠去何人留
寫成10進位制 可以直接加負號
寫成16進位制 最高位為1即可。
負數表示為補碼, 最高位為符號位 為1
其它位為原碼按位取反加一。
c語言裡的八進位制跟十六進位制有負數嗎?
21樓:手機使用者
示的整數,我們都知道整數是可以是正數或負數的,所以這樣表示沒有問題。
不論是二進位制、八進位制、十進位制、十六進位制甚至是三十二進位制還是多少多少進位制,都只是一種數值的表示方法而已,它們歸根結底表示的都是整數,理解了這一點就好了。
----------------------對補充資訊的回答:
我說過,這些只是不同進位制對整數的表示方法。八進位制、十六進位制同樣可以表示負數。比如你舉的例子,-1這個值,十六進位制表示為0xffffffff。
這裡面第一位數(就是0x後面的第一個f),它的二進位制值是1111,這4個1的第一位1就是符號位,為0表示整個數為正值,為1表示整個數為複製。
也就是說,0x8-0xf開頭的十六進位制數就是負數。
八進位制類似。
再說一句,計算機程式中,我們平時的正負號(+和-)是為了描述十進位制數使用的,其他進位制有自己的正負值表示方法,並不使用正負號。
22樓:
c語言的變數可以定義為有符號數或者無符號數,有符號數就有正負的區別,最高位定義為符號位,1代表負數,0代表正數。
23樓:匿名使用者
有負數,只不過在定義的時候無符號數和有符號數在記憶體裡面的表示方式是有區別的
24樓:德昂當
c語言是允許負數,但在一個數字前加 - 是十進位制對負數的表示法。
要求的是八進位制和十六進位制 這兩種進位制就不是用在前面加 - 表示負數
C語言裡5 3的值 是怎麼算出來的
橘落淮南常成枳 在c語言裡!的意思是 非 5 3就是5非等於3,就是5不等於3,這邏輯是對的,所以值是1 如果為3!3的話,值就為0了。是c語言中的非運算子,在變數前面使用它,會構建非運算表示式,表示式的返回結果是個布林值 也就是隻有true或false 對變數使用時,如果變數不是布林資料型別,將會...
求算出來的公式,派是怎麼算出來的?
設 x y 8,z w 6,x z 13,y w 8則 x y 8 1 x z 13 2 z w 6 3 y w 8 4 y z 14 5 z y 5 6 2z 19z x w 因此原方程組解 x z 希望對您有所幫助。在excel中如何使用計算公式來開根號?下面將舉例項來說明在excel中如何使用...
星座運勢怎樣算出來,星座運勢是怎麼算出來的
西方玄學家通過太陽曆演練出來的一種算術。與中國易經之 相差甚遠,其準確率太低,因此建議您不要相信星座命運。 沙漣 呵呵 好的信 壞的不信 星座運勢是怎麼算出來的 我覺得星座學是準的,因為它屬於統計學 但是運勢這種東西是假的 沒人可以未卜先知。 狄潦岏鸊毱曛紦 根據太陽啊,每顆星星的位置啊什麼的測出來...