- c语言中没有字符串类型
- void *类型可以保存地址,但不能进行解引用
- 数字.字符在内存中存储,以补码的形式存储
- 大小端:
大端:低地址存放高数据
小端:低地址存放低数据
为什么有大端与小端?
答:由于寄存器宽度大于一个字 节,那么必然存在着一个如果将多个字节安排的问题
判断大小端:
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)大小足够容纳最宽的成员;
2)大小能被其包含的所有基本数据类型的大小所整除。
union Un //共用一个内存空间
{
int a;
char ch;
}
- **整形提升(重点)
对于有符号数提升他的符号位
对于无符号数提升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
- 浮点型
浮点型和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全为在这里插入代码片