C语言之数据存储

  1. c语言中没有字符串类型
  2. void *类型可以保存地址,但不能进行解引用
  3. 数字.字符在内存中存储,以补码的形式存储
  4. 大小端:
    大端:低地址存放高数据
    小端:低地址存放低数据
    为什么有大端与小端?
    :由于寄存器宽度大于一个字 节,那么必然存在着一个如果将多个字节安排的问题
    判断大小端
int IsLitte()   //是小端返回1,否则返回0
{
	int a = 0x12345678;
	char *p = &a;
	if(*p == 0x78)
		return 1;
	return 0;
}

int IsLitte1()
{
	union Un
	{
		int a;
		char ch;
	}uu;
	uu.a = 0x1234578;
	
	if(uu.ch == 0x78)
		return 1;
	return
	
}
  1. 联合体:共用体-》内存
    联合体所占的空间:
    1)大小足够容纳最宽的成员;
    2)大小能被其包含的所有基本数据类型的大小所整除。
union Un   //共用一个内存空间
{
	int a;
	char ch;
}
  1. **整形提升(重点)
    对于有符号数提升他的符号位
    对于无符号数提升0;
    %u在内存中存储的就是他的原码
char a = -1;
printf("%d",a);

unsigned char b=-1;
printf("%d",b);

char ch = -128;           
printf("%u\n",ch);  

相关重点题:

1.int main()
{
	unsigned int i;
	for(i = 9;i>=0;i--)
	{
		printf("%d\n",i);
	}
	return 0;
}
//解析:死循环;因为对于无符号数 0 下面是 2^32-1;

2.int main()
{
	char a[1000];
	int i ;
	for(i = 0;i < 1000;i++)
	{
		a[i] = -1-i;
	}
	
	printf("%d\n",strlen(a));
	return 0;
}

//解析:答案255,-1,-2,……,-128,127,126,……,0,-1
  1. 浮点型

    浮点型和0比较时是一个(-0.000001 <= f && f<= 0.000001)
    数值=(-1)^s * M * 2^E;
    1).IEEE 754对有效数字M和指数E,还有一些特别规定。
    1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形 式,其中xxxxxx表示小数部分存放在尾数中。
    2).至于指数E,情况就比较复杂。
    E为一个无符号整数(unsigned int) 这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的 取值范围为0~2047。但是,科学计数法中的E是可以出现负数的,所以规定,存入内存时E的真 实值必须再加上一个中间数,对于8位的E,这个中间数是127;
    指数E从内存中取出还可以再分成三种情况:
    E不全为0或不全为1
    这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),
    得到真实值,再将有效数字M前 加上第一位的1。 比如: 0.5(1/2)的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位, 则为
    1.0*2^(-1),其阶码为-1+127=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位 00000000000000000000000,则其二进制表示形式为:
    E全为0
    这时,浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1,而是还原为 0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
    E全为1
    这时,如果有效数字M全为在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值