数据在内存中的存储

整数在内存中的存储 - 存储的是二进制 - 二进制表示:原码、反码、补码 - 内存中存储的是补码


//1.整数在内存中存储的是二进制的补码;2.在调试窗口中观察内存的时候,为了方便展示,显示的是十六进制的值;3.存储的顺序是倒置的
//大端字节序存储:把低位字节的内容存储到高地址处,把高位字节的内容存储到低地址处
//小端字节序存储:把低位字节的内容存储到低地址处,把高位字节的内容存储到高地址处
//存储模式由硬件决定

//int main()
//{
//    int n = 0x11223344;
//    return 0;
//}

//int main()
//{
//    int n = 1;
//    if (*(char*)&n == 1)
//    {
//        printf("小端\n");
//    }
//    else
//    {
//        printf("大端\n");
//    }
//    return 0;
//}

//int check_sys()
//{
//    int n = 1;
//    return *(char*)&n;
//}
//
//int main()
//{
//    int ret = check_sys();
//    if (ret == 1)
//    {
//        printf("小端\n");
//    }    
//    else
//    {
//        printf("大端\n");
//    }
//    return 0;
//}

//根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
//V = (−1)∗ S M ∗ 2E
//•(−1)S 表⽰符号位,当S = 0,V为正数;当S = 1,V为负数
//• M 表⽰有效数字,M是⼤于等于1,⼩于2的
//• 2
//E 表⽰指数位
//浮点数的存储其实存储的是S、M、E相关的值
//对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M
//对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M
//IEEE 754 规定,在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的
//xxxxxx部分。⽐如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。这样做的⽬
//的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保
//存24位有效数字。
// 存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023
//例:5.5 - 十进制的浮点数表示形式 - 101.1 - 1.011*2² - (-1)^0*1.011*2² - S=0 - M=1.011 - E=2

//int main()
//{
//    char a = -1;//char到底是有符号还是无符号取决于编译器 - VS上char==signed char
//    //11111111 - a
//    //整型提升 - 11111111111111111111111111111111
//    signed char b = -1;//内存中的最高位被当作符号位
//    //11111111 - b
//    //整型提升 - 11111111111111111111111111111111
//    unsigned char c = -1;
//    //11111111 - c
//    //整型提升 - 00000000000000000000000011111111
//    printf("a=%d,b=%d,c=%d\n", a, b, c);
//    return 0;
//}

//int main()
//{
//    char a = -128;
// //10000000000000000000000010000000
// //10000000 - a
//    printf("%u\n", a);//%u - unsigned int - 认为a中存放的是无符号数
//    //a是char类型,首先整型提升,补符号位 - 11111111111111111111111110000000
//    return 0;
//}

//int main()
//{
//    char a = 128;
//    //00000000000000000000000010000000
//    //10000000 - a
//    printf("%u\n", a);
//    //整型提升 - 11111111111111111111111110000000
//    return 0;
//}

//int main()
//{
//    char a[1000];//0~999
//    int i;
//    for (i = 0; i < 1000; i++)
//    {
//        a[i] = -1 - i;
//    }
//    //-1 -2 -3 -4 …… -127 -128 127 126 …… 0 -1 -2
//    printf("%d", strlen(a));
//    return 0;
//}

//unsigned char i = 0;//unsigned char的存储范围0~255
//int main()
//{
//    for (i = 0; i <= 255; i++)
//    {
//        printf("Hello world\n");
//    }
//    return 0;
//}

//int main()
//{
//    unsigned int i;//>=0
//    for (i = 9; i >= 0; i--)
//    {
//        printf("%u\n", i);
//        Sleep(1000);
//    }
//    return 0;
//}

//x86环境 小端字节序
//int main()
//{
//    int a[4] = { 1,2,3,4 };
//    int* ptr1 = (int*)(&a + 1);
//    int* ptr2 = (int*)((int)a + 1);
//    printf("%x,%x", ptr1[-1], *ptr2);//%x - 打印十六进制整数
//    return 0;
//}

//整型和浮点型在内存中的存储方式是不一样的
//int main()
//{
//    int n = 9;
//    float* pFloat = (float*)&n;
//    printf("n的值为:%d\n", n);
//    printf("pFloat值为:%f\n", *pFloat);
//    *pFloat = 9.0;
//    printf("n的值为:%d\n", n);
//    printf("*pFloat值为:%f\n", *pFloat);
//    return 0;
//}


//int main()
//{
//    float f = 5.5f;
//    //5.5
//    //101.1
//    //1.011*2
//    //(-1)^0*1.011*2²
//    //S=0 - M=1.011 - E=2
//    //0100 0000 1011 0000 0000 0000 0000 - 二进制
//    //40 B0 00 00 - 十六进制
//    return 0;
//}



 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值