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 ...