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

来源:互联网 发布:模拟星空软件中文版 编辑:程序博客网 时间:2024/06/06 20:23

使用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=2147483648int a=4294967295;       //2^32=4294967296int 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=2147483648unsigned a=4294967295;       //2^32=4294967296unsigned 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=2147483648unsigned a=4294967295;       //2^32=4294967296unsigned k=u+1;unsigned b=a+1;printf("unsigned:\nu=%u\nk=%u\n",u,k);printf("a=%u\nb=%u",a,b);getchar();}
运行结果为:

这样子结果就对了。

0 0
原创粉丝点击