#include <stdio.h>
int main() {
unsigned char c = (int) 0.54;
for(; c ; printf("%d", c));
printf("%d", c);
return 0;
}
當我運行程式時,輸出顯示為1
輸出怎么可能是1?提前致謝
uj5u.com熱心網友回復:
在第一行 - unsigned char c=(int)0.54;
char 實際上存盤了字符的 ASCII 代碼,因此以另一種方式它是一個整數,它以這種方式存盤資料:編譯器將存盤到字符中的數字從十進制數字系統轉換為二進制數字系統,并考慮到只有該數字右側的前 8 位以二進制表示。(我們不需要考慮負數的情況,因為您使用無符號字符)-因此變數c
在末尾取 0 作為值這條線。
對于代碼的第二行 - for(;c ;printf("%d",c));
:所以我們有一個 for 回圈( for (INITIALIZATION; CONDITION; AFTERTHOUGHT))
** 在 INITIALIZATION 部分,將其留空很好,這相當于您已經初始化了要用作回圈變數的變數。
** 在 CONDITION 部分,c 等價于 c !=0。它使 for 回圈一直運行直到 c ==0。(在您的情況下, c 由 0 初始化,因此我們將擁有 c =0 并且程式立即退出 for 回圈)。
** 在 AFTERTHOUGHT 部分,printf 在每次迭代結束時運行,但不會改變 c 的值。(由于條件 c !=0 未驗證代碼不會撰寫迭代,因此不會傳遞給 printf)
printf("%d",c);
將顯示 1(回圈中的 c 用作條件,同時將變數 c 遞增 1;c 后增量運算子使用“use-then-change”原則,因此,c 在退出后恰好遞增 1 for 回圈,并且 c 等于 1)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467867.html