使用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();
}
运行结果为:
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();
}
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();
}
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();
}
这样子结果就对了。