重点:1.数据类型详细介绍
2.整型在内存中的存储:原码 反码 补码
3.大小端字节序介绍和判断
4.浮点型在内存中的存储解析
前面都有char short int...详细介绍,翻一翻.需要注意的是,C语言没有字符串类型哦.
计算机永远存储的都是补码,计算也是用补码进行的,只有在要输出的时候转化成原码.
int a = -10;(正数的三个码一致哦)
//1000 0000 0000 0000 0000 0000 0000 1010原
//1111 1111 1111 1111 1111 1111 1111 0101反
//1111 1111 1111 1111 1111 1111 1111 0110补
// F F F F F F F C
大小端
大端:数据的低位保存在内存的高地址,数据的高位保存在内存的低地址
小段:数据的低位保存在内存的低地址,数据的高位保存在内存的高地址
网络字节序---大端
int main(){
char a = -1;
signed char b = -1;
unsigned char c = -1;//1000 0001
//1111 1110
//1111 1111 FF
printf("a = %d,b = %d,c = %d",a, b, c);
return 0;
}
a = -1,b = -1,c = 255
int main(){
char a = -128;
//1000 0000
//1000 0000 0000 0000 0000 0000 1000 0000
//1111 1111 1111 1111 1111 1111 0111 1111
//1111 1111 1111 1111 1111 1111 1000 0000
//4294967168
printf("%u\n",a);
system("pause");
return 0;
}
浮点数的存储
#include<stdio.h>
int main(){
float f = 1.125;// (-1) ^ s * m * 2 ^ e ==> s = 0 m = 1.125 e = 0
system("pause");
return 0;
}
#include<stdio.h>
int main(){
float f = 10.125;//1010.001 (-1)^s*m*2^e
system("pause");//1.010001 (-1)^s*
return 0; //10.125
} //1010.001(小数化二进制的乘二取整法)0.125*2=0.25 -> 0;0.25*2=0.5->0; 0.5*2=1->1
//1.010001 *2^3
//(-1)^s*m*2^e s=0 m=1.01001 e=3
按照 s(一位) e(八位) m(二十三位)的顺序写,其中m减去1只要小数点后面的,e加中间数127再转成二进制
e全为0时 指数e=1-127,有效数字m不再加上第一位的1,而是还原为0.xxxxxxxx的小数,无限接近于0;
e全为1,这时如梭有效数字m全为0,表示无穷大(正负取决于符号位)