SOGO論壇

標題: 拜託高手解釋一下@@ [列印本頁]

作者: guess1319    時間: 2009-4-11 12:50:13     標題: 拜託高手解釋一下@@

學校考試有一題是這樣子的(C語言)。

int cnt, x;
for(cnt=0, x= 0xffffffff; x; x<<=8, ++cnt);
printf("[%d,%d]",cnt,x);

問cnt和x會是多少,
答案是[4,0],
我知道x=0是為什麼,
可是前面cnt為什麼會是4一直搞不清楚,
能否幫解惑一下
作者: 09380938    時間: 2009-4-11 20:01:02

X= 0x ffff ffff(16進位) =1111 1111 1111 1111  1111 1111 1111 1111(2進位)
迴圈每次 左移8個位元補0
4次就變0
++cnt 沒每迴圈 +1
4次 cnt = 4
作者: guess1319    時間: 2009-4-12 12:56:54

[quote]原帖由 09380938 於 2009-4-11 20:01 發表
X= 0x ffff ffff(16進位) =1111 1111 1111 1111  1111 1111 1111 1111(2進位)

謝謝解答。
不過再請教一下,
上面的16進位是如何轉換成2進位的?
一定要轉換成2進位才能繼續做答嗎?

因為我看完後再去做了相似題。

int cnt, x;
for(cnt=0, x=01234567; x; x>>=3, ++cnt);;
printf("[%d,%d]",cnt,x);

那我一樣是要把x=01234567這個轉換成2進位才能繼續做嗎?
還是有點不太了解><
作者: 笨笨小海    時間: 2009-5-7 02:43:00

解釋的好清楚,

原來C語言沒想像中的困難!!!!




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM