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:
+
-----------------------------------------