#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <assert.h>
//unsigned char无128 -- 10000000为-128
//unsigned char - [0,127] || [129,255]
//浮点数的表现方式:(-1)^S * M * 2^E
//
//S为符号位,S = 0为正,S = 1为负
//
//M表示有效数字,1 <= M < 2
//
//2^E表示数位
//
//例:5.5转化为二进制 -> 101.1,小数点后的1代表2^(-1)
// 转化为科学计数法:(-1)^0 * 1.011 * 2^2
//对于float的储存:(单位bit,按存储顺序)
// S -- 1
// E -- 8
// M -- 23
//对于double的储存:(单位bit,按存储顺序)
// S -- 1
// E -- 11
// M -- 52
//其中M一定为1.xxxxxx,故个位的1不存储,M在内存中只存小数点后的数
//E是无符号数
//
//x在E中存的是x + 1/2 * Emax的最高位
//
//即对于float,E = -1 -- -1 + 127 = 126,内存中实际存的是126
//对于double,E = -1 -- -1 + 1023 = 1022,内存中实际存的是1022
//
//当E存的全是0(1),表现为无穷小(无穷大),与M的值无关
int main()
{
int a = 1;
float b = 9;
printf("%f\n", a);//0.000000
//1 -- 0 00000000 00000000000000000000000
//E全为0 -- 无穷小
printf("%d\n", a);//1
printf("%f\n", b);//9.000000
printf("%d", b);//linux环境下输出一个很大的数
//1.001 * 2^3
//S = 0; E = 3; M = 00100000000000000000000
//0 10000010 00100000000000000000000 -- 打印出的是这个数的十进制
return 0;
}