c語言32位
① c語言 怎麼區分當前系統是32位還是64位
經過對include的翻查,最後確定gcc以__i386__來進行32位編碼,而以__x86_64__來進行64位編碼;64位的gentoo下stdio.h就是個簡單例子(i不曉得其它的是不是?);而且在bits/wordsize.h中對這兩個定義進行了綜合,以__WORDSIZE的值來表示機器類型,大家可以直接去看看
例子
#include <stdio.h>
int main(int argc ,char* argv)
{
#ifdef __x86_64__
printf("__x86_64__");
#elif __i386__
printf("__i386__");
#endif
return 0;
}
② c語言中32-bit是什麼意思
32bit指的是CPU一次能處理的最大位數是32位
即32位處理器每次處理 4Byte(32bit)
③ c語言移位運算,當移動32位時,該怎麼處理
32位的晶元,位移操作的處理是這樣的: 左移時移出的高位全部丟棄,低位全補0,所謂移出的高位是指超過32位,即4個位元組後會丟棄; 右移時,移出的位數全部丟棄,對於無符號數,則高位補0;對於有符號數,則符號位補0還是1,不確定。
④ c語言程序中怎樣實現"任意兩個32位數相加"
正如樓上 heephi 所說, 用數組來存放 32 位數,
就是數組每個元素存入這個 32 位數的每一位
如 有數
那麼數組其實就肆棚磨是 {1, 1, ..., 1, 2, 2, ..., 2, 3, 3, ..., 3, 0, 0}
在此基礎上, 對每位進行相加, 遵循 滿十進一的規則
看樣例:
#include <stdio.h>
int main()
{
int a[32], b[32], c[32] = {0};
int i;
char buf[33]; /* 用於存入輸入的數字(其實就是字元串) */
printf("請輸入數 A: "); scanf("%s", buf);
for (i = 0; i < 32; i++)
{
if (buf[i] < '0' || buf[i] > '9')
{
printf("對不起, 你的輸入有錯, 可能出現非數字字元或數字長度不為 32");
return 0; /* exit(0) */
}
a[i] = buf[i] - 0x30;
/* 因為 '0' 的 ASCII 碼是48, 0x30 表示十六進制也就是十進制的 48,
所以 '0' - 0x30 就是 0, '9' - 0x30 就是 9, 也就實現了數字字元轉為數字 */
}
printf("請輸入數 B: "); scanf("%s", buf);
for (i = 0; i < 32; i++)
{
if (buf[i] < '0'裂斗 || buf[i] > '9')
{
printf("對不起, 你的輸入有錯, 可能出現非數字字元或數字長度不為 32");
return 0; /* exit(0); */
}
b[i] = buf[i] - 0x30;
/* 因為 '0' 的 ASCII 碼是48, 0x30 表示十六進制也就是十進制的 48,
所以 '0' - 0x30 就是 0, '9' - 0x30 就是 9, 也就實現了數字字元轉為數字和螞 */
}
/* 好了, 現在就是實現相加了 */
for (i = 31; i >= 0; i--)
{
c[i] += a[i] + b[i];
if (c[i] > 10)
{
c[i] -= 10;
if (i != 0) c[i - 1] += 1;
}
}
/* 相加完成, 現在輸出結果 a + b = c */
printf("\n\n\t");
for (i = 0; i < 32; i++)
{
printf("%d", a[i]);
}
printf("\n +\t");
for (i = 0; i < 32; i++)
{
printf("%d", b[i]);
}
printf("\n-----------------------------------------\n\t");
for (i = 0; i < 32; i++)
{
printf("%d", c[i]);
}
printf("\n");
return 0;
}
這個程序有些缺陷:
1. 必須兩個數均為 32 位, 所以不能計算一個 32 位數與位數小於 32 的數相加
2. 當兩數相加大於 32 位數時, 只能顯示最後 32 位數, 也就是溢出
3. 不能實現負數相加
程序運行結果:
------------------------------------------------
請輸入數 A:
請輸入數 B:
+
-----------------------------------------