目录
数据类型
C语言中,有int、short,float、double、long、char、bool等常用数据类型。
以下通过代码获取数据类型所占字节的大小。注意:32位和64位环境下结果可能不同。
#include<stdio.h>
int main()
{
int a=10;
short int b=5;
long int c=8;
long long int d =16;
char e='k';
float f=1.123456789;
double g=9.87654321123456789;
printf("a size is=%d, a value is=%d\n",sizeof a,a);
printf("b size is=%d, b value is=%hd\n",sizeof b,b);
printf("c size is=%d, c value is=%ld\n",sizeof c,c);
printf("d size is=%d, d value is=%lld\n",sizeof d,d);
printf("e size is=%d, e value is=%c\n",sizeof e,e);
printf("f size is=%d, f value is=%.10f\n",sizeof f,f);
printf("g size is=%d, g value is=%.17lf\n",sizeof g,g);
return 0;
}
输出:
a size is=4, a value is=10 (int)
b size is=2, b value is=5 (short)
c size is=4, c value is=8 (long)
d size is=8, d value is=16 (long long)
e size is=1, e value is=k (char)
f size is=4, f value is=1.1234568357 (float)
g size is=8, g value is=9.87654321123456747 (double)
在看f和g的输出的时候,我们发现f和g并没有打印出正确的值。
原因是:
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
%.17lf和表示输出双精度浮点数的小数点后17位,如果是%30.17lf表示输出的值所占宽度为30,小数点位数占17位。
其中sizeof和strlen的区别:
sizeof()函数表示返回一个对象或者类型所占的内存字节数。
如果是求字符串的字节数,那么sizeof所返回的字节数包含结束符"\0", 而strlen不包含。
比如char a[]="hello";sizeof(a)的返回字节数是6,strlen(a)返回的字节数是5。
---------------------------------------------分隔符-------------------------------------------------------
数据存储
在计算机里,首先我们知道 对于有符号正数,它的最高位是符号位,0是正,1是负。
正数:数值按原码存储(原码是这个数本身的二进制形式,而且正数的反码和补码都和原码相同)
负数:数值按补码存储 -->反码+1得到补码 (反码是原码除最高位之外的其余按位取反得到)
char A=128; printf("%d\n",A); 输出-128,为什么是-128呢。
char 字符型的存储范围是 (-128-127),在计算机中,
(取反) (+1)
1000 0000 (128)(原码) --------->得到 1111 1111(反码) ---------->得到1000 0000 (补码) = -128
注意:1是符号位,代表负,所以是-128
下一篇 C语言运算符