把 用字串形式 輸入的 2進位制數, 化成10進位制數值, 並按 10 進位制 輸出。
n=n*2+st2[i]-48; 可以看成 n=n*2+ (st2[i]-48);
st2[i]-48 就是把 str2[i] 這個字元 的 ASCII 碼值,化成 算術值。
因為 字元 "0" 的編碼 是 48, 字元 "1" 的編碼 是 49,
st2[i]-48 就變成了 0 或 1, 看你 輸入的 某位上的 字元 是 "0" 還是 "1"。
n*2 就是 把 數值 n 乘 2。
for(i=0;st2[i]!=0;i++) 裡的 !0 就是 一個字元一個字元地處理,直到遇見 字串結束符。
例如輸入 111。
i=0; st2[i]=="1"; n = "1"-48 = 1;
i=1; st2[i]=="1"; n = 1 * 2 + ("1"-48) = 2+ 1 = 3;
i=2; st2[i]=="1"; n = 3 * 2 + ("1"-48) = 6+ 1 = 7;
printf("%d\n",n); 輸出 7。
把 用字串形式 輸入的 2進位制數, 化成10進位制數值, 並按 10 進位制 輸出。
n=n*2+st2[i]-48; 可以看成 n=n*2+ (st2[i]-48);
st2[i]-48 就是把 str2[i] 這個字元 的 ASCII 碼值,化成 算術值。
因為 字元 "0" 的編碼 是 48, 字元 "1" 的編碼 是 49,
st2[i]-48 就變成了 0 或 1, 看你 輸入的 某位上的 字元 是 "0" 還是 "1"。
n*2 就是 把 數值 n 乘 2。
for(i=0;st2[i]!=0;i++) 裡的 !0 就是 一個字元一個字元地處理,直到遇見 字串結束符。
例如輸入 111。
i=0; st2[i]=="1"; n = "1"-48 = 1;
i=1; st2[i]=="1"; n = 1 * 2 + ("1"-48) = 2+ 1 = 3;
i=2; st2[i]=="1"; n = 3 * 2 + ("1"-48) = 6+ 1 = 7;
printf("%d\n",n); 輸出 7。