Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)

时间:2023-01-11 17:58:57

使用sizeof函数分别测出各类型的字节大小:

#include <stdio.h>

void main()
{
char a[]="hello";//c语言中,每个字符串常量的结尾都会加一个'\0'字符作为字符串结束标志,所以a应该占6个字节。
short int b;
int c;
long int d;
float e;
double f;
long double g;
printf("size of a is %d\n",sizeof(a));
printf("size of short int is %d\n",sizeof(b));
printf("size of int is %d\n",sizeof(c));
printf("size of long int is %d\n",sizeof(d));
printf("size of float is %d\n",sizeof(e));
printf("size of double is %d\n",sizeof(f));
printf("size of long double is %d\n",sizeof(g));
getchar();
}

运行结果为:

Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)


C语言中数值是以补码形式表示的,一个正整数的补码和该数的原码(即该数的二进制形式)相同;求负数的补码的方法是:将该数的绝对值的二进制形式,按位取反再加1。

int类型 :

#include<stdio.h>

void main()
{
int u=2147483647; //2^31=2147483648
int a=4294967295; //2^32=4294967296
int k=u+1;
int b=a+1;
printf("int:\n u=%d\nk=%d\n",u,k);
printf("a=%d\nb=%d",a,b);
getchar();
}
运行结果为:

Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)

Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)

u在计算机中的表示是0111  1111  1111  1111  1111  1111  1111  1111,第一个位是符号位。

k在计算机中的表示是1000   0000  0000  0000 0000  0000  0000   0000,这刚好是-2147483648的补码形式。

a在计算机中的表示是1111  1111  1111  1111  1111  1111  1111  1111,但由于int类型只占4个字节 且第一个位是符号位,这刚好是-1的补码形式。

b在计算机中的表示是0000  0000  0000  0000  0000  0000  0000  0000,前面本来还应有个位用来装进位的1,但是只有32位,所以b=0;

unsigned类型:

#include<stdio.h>

void main()
{
unsigned u=2147483647; //2^31=2147483648
unsigned a=4294967295; //2^32=4294967296
unsigned k=u+1;
unsigned b=a+1;
printf("unsigned:\n u=%d\nk=%d\n",u,k);
printf("a=%d\nb=%d",a,b);
getchar();
}
运行结果为:

Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)

Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)

unsigned类型的运行结果怎么和int类型是一样的呢?

原来是我输出的时候,用的是%d,然而输出无符号数应该用%u才对。

将代码改为:

#include<stdio.h>

void main()
{
unsigned u=2147483647; //2^31=2147483648
unsigned a=4294967295; //2^32=4294967296
unsigned k=u+1;
unsigned b=a+1;
printf("unsigned:\nu=%u\nk=%u\n",u,k);
printf("a=%u\nb=%u",a,b);
getchar();
}
运行结果为:

Microsoft visual C++ 2010学习版中C语言基本数据类型所占字节大小(系统为64位win8.1)

这样子结果就对了。