c語言a的輸出結果為什麼是 1,b的最後輸出結果為什麼是

2021-05-23 22:10:55 字數 3687 閱讀 1706

1樓:匿名使用者

資料在計算機中都是以補碼儲存的,a的補碼為0xffff,b的補碼為0xfffe。我這為寫著方便,用十六進位制寫,沒用二進位制寫,要不16個1看著都暈。

%d是按有符號整型輸出,此時認為a是個負數,根據0xffff來求該負數絕對值的原碼,為0x0001,輸出即為-1。

%u是按無符號型資料輸出,此時將b看作正數,其補碼即為原碼,0xfffe即為65534。

2樓:匿名使用者

你的問題其實是轉碼的問題,二進位制補碼轉換

3樓:匿名使用者

無符號和有符號的區別。

c語言**如下 int a=1,b; printf("%d\n%d\n",a,b); 為什麼輸出結果為: 1 8 這個8是怎麼來的?

4樓:匿名使用者

這個8應該是未初始化的結果,c語言沒有要求必須初始化(具體怎麼處理看編譯器的配置了),它在不同環境上跑的結果可能不一樣。例如

上面那個才是debug單歩的輸出

為什麼輸出的第一個結果是1?

5樓:琉璃蘿莎

雙重迴圈語句。第一次運算 用 i 的 初始值1 和 j 的 初始值 1,

i*j 輸出為 1。

第二次運內算,i 等於

容 1, j 增 1 等於 2。

第三次運算,i 等於 1, j 增 1 等於 3。

第四次運算,i 等於 1, j 增 1 等於 4。

第五次運算,i 等於 1, j 增 1 等於 5。

第六次運算,i 增 1 等於 2, j 等於 1。。。。。

6樓:頑強的一棵小草

說我的時候一定要。特別的小心,要不然輸入的結果就是不一樣的。

7樓:鹿哥我歐巴

對了就行了嗎?再驗算一遍。

c語言基礎 求a/b的值 為啥輸出結果小數點後全是0?

8樓:弒緋

你將a和b的型別設定為了整型,c又是浮點型,這裡在計算的時候a/b的結果也會是個整型,如果你的結果是個小數結果,根據整型的設定,會強制變成0,所以即使因為c是浮點型,在賦值時把a/b的結果強制轉換成了浮點型數,結果也是0。你最後的輸出當然也是0

9樓:匿名使用者

a b都為整數,整數相除結果仍為整數,小數部分捨棄修改方法:

c = 1.0 * a / b;

c = (double)a / b;

c = a / (double)b;

c語言中int a=1,b=2,c c=1.0/b*a 輸出結果為什麼

10樓:匿名使用者

結果是c的值是0

因為1.0 / b 都會轉換位浮點型,結果是0.5, 0.5 * a 也是會把a轉為浮點型,結果是0.5

而c是整形,會對右邊運算的結果取整,所結果就是0了。

c語言 求結果和為什麼 main() { unsigned a=65534; pri

11樓:匿名使用者

65534,65534,177776,fffe%d按10進位制輸出(有符號)

%u按無符號數輸出

%o按8進位制輸出

%x按16進位制輸出

c語言:int b=-2;printf("%u\n",b);輸出結果:65534 求計算過程

12樓:匿名使用者

從你的結果來看

bai,你的du編譯器將整形視為2個位元組大zhi小。這個對結果的分析dao沒專什麼影響。機

器中的資料都屬是以補碼的形式儲存的,最高位表示符號,正數的補碼是其本身,負數的補碼是其絕對值的二進位制按位取反加1得到的二進位制碼。對於你這裡的-2來說,2的二進位制表示為

0000000000000010

那麼-2的補碼就是將上述二進位制按位取反再加1取反得:1111111111111101

再加1得:1111111111111110這就是-2在機器中的儲存形式,你現在是要以%u的形式,也就是無符號的整數,那麼上面的那個二進位制串的最高位就不是表示符號了,把它轉換成10進位制就是65534

13樓:

%u是指按照無符號十進位制輸出,-2在記憶體中是按照補碼儲存的,即-2的儲存形式是2的各位取反再版

加1,2:0000 0000 0000 0000 0000 0000 0000 0010,取反後:1111 1111 1111 1111 1111 1111 1111 1101,加權1 :

1111 1111 1111 1111 1111 1111 1111 1110,最高位為1表示這個數是負數,按照無符號十進位制輸出時,最高位也計算入內,不再計入符號位,所以輸出的數變為:2^1 +... + 2^31 = 4294967294.

同理,-1, -3, 0輸出分別為:4294967295, 4294967293, 0.以上結果在visual studio2010中執行,int為4個位元組。

14樓:大林因

可以看出來你是在16位系統上執行這程式得到的結果.

其實你想問的是有符號內型容整數與無符號型整數的轉換關係而已.

有符號型整數的最高位表示 符號, 負數情況下為1, 而無符號型整數的最高位表示數值.

-1 => 65535

-3 => 65533

0 => 0

15樓:匿名使用者

要理解抄

這個,襲先要了解補碼的概念

看了這個你就明白了

c語言中,語句:printf("%d",(a=2)&&(b= -2);的輸出結果是1,這是為什麼

16樓:匿名使用者

因為是(a=2)&&(b=-2)

不是(a==2)&&(b==-2)

單個等於號是賦值運算,返回的是變數的值

所以是2&&-2 最終結果是1

c語言 main() { char a='1',b='2'; printf("%c",b++);printf("%d\n",b-a)} 結果是什麼?說明一下。

17樓:右傾的墮落主義

答案是:22

分析:char a='1'b='2'; //賦值,注意a b的型別為char

printf("%c",b++); //以字元型列印列印b後b才自加,所以是現打

//印出「2」後

//b的ascii碼值是50,自加後是51printf("%d\n",b-a) //這句是b的ascii碼值減去a的ascii碼值後

//以整型輸出,即51-49=2,所以輸出「2」

18樓:匿名使用者

輸出結果 22

main()

19樓:匿名使用者

22 第一個2是字元第二個2是數字

printf("%c",b++);先輸出b,再b++,b變成'3'了

printf("%d\n",b-a);b-a也就是'3'-'1'=2

c語言輸出結果是19為什麼

printf d n strlen p 是什麼dd?應該是printf d n s 吧?for i 0 i 4 i s aa i 1 對每行第2個數字求和,所以是19。aa 4 4 是一個4 x 4的矩陣i m1 m2 n 3 n 2 n 5 5 5 25 你可以把 define看成文字替換,就是在...

C語言程式為什麼最後的輸出結果是這個

getchar接收的是 字元 putchar輸出的也是字元 它們不會接收和輸出整數!第一次c 2 執行case 0 後面的語句直到遇到break 所以輸出是 6 6 顯示就是66。第二次c 4 執行case 2 後面的語句直到遇到break 所以輸出是 8 顯示就是668。第三次c 7 執行defa...

求助C語言,連結串列輸出正確結果的前面為什麼多了

看你的太麻煩 這是我以前做的 你看看 比你的那個要完善 include stdio.h include malloc.h include stdlib.h typedef struct node node,pnode pnode creste lise void 建立一個非迴圈單連結串列 void ...