windows操作系统64位中,char占一个字节,int占4个字节,代码和测试结果如下
int s=sizeof(int);
int i=sizeof(char);
int main (void)
{
printf("%d\n",s);
printf("%d\n",i);
int 和char的区别只是数据大小不同,无论输入什么,在内存中都会以二进制形式存储的,只是printf打印时候会以不同的方式显示,int,char都可以用%d打印成整数,也可以用%c打印成字符,他们只是int是用32bit来表示数据大小,char是用8bit来表示数据大小。int和char表示的数据范围可以用如下代码测试。
#include<limits.h>
#include<stdio.h>
int max=INT_MAX;
int min=INT_MIN;
int main()
{
printf("%d\n",max);
printf("%d",min);
return 0;
}
结果如下:
再举一个例子:
#include<stdio.h>
int test1[] = {65535,50,51,52};
int test2[] = {49,50,51,52};
int s=sizeof(int);
int i=sizeof(char);
int main (void)
{ int a='1';
char c=49;
printf("a=%c\r\n",a);
printf("a=%d\r\n",a);
printf("c=%c\r\n",a);
printf("c=%d\r\n",a);
printf("%d\n",s);
printf("%d\n",i);
// printf("%c",test2[0]);
// printf("%c",test2[1]);
// printf("%c",test2[2]);
return 0;
}
输出结果:
把字符‘1’存入变量a中,在内存中保存的是49对应的二进制,然后根据输出格式的不同进行打印,%d要求把内存中的二进制转换成10进制输出49,%c要求把内存中的二进制根据阿斯克码表转换成相应的字符c输出。所以a,c输入形式对结果没影响,对结果有没有影响在于printf的打印格式。
那为什么我们一般用int保存整型,不用int保存‘1’呢,因为字符是1字节,用int来保存则是4字节,比较浪费内存资源。如果我们输入的整型数字太大了,则char又无法表示,所以用int表示。
附上gpt解释: