c语言数据类型与存储

目录

数据类型

数据存储


数据类型

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语言运算符

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值