0
点赞
收藏
分享

微信扫一扫

【划重点】深入底层:数据的存储(1)

杏花疏影1 2022-04-29 阅读 101

1.整形在数据中的存储

比如:

int a = 20;
int b = -10

我们知道int类型的a会分配4个字节的空间,那该如何存储呢?

这里要涉及到一个概念:原码,反码,补码。

1.1原码,反码,补码

计算机中的有符号数(整数)有三种表示方法,即原码,反码,补码。

三种表示方法均有符号位数值位为组成,符号位都是用“0”表示正,用“1”表示负,数值位的三种表示形式各不相同。

原码

直接将数字按照正负数翻译成2进制的数字即可。

反码

将原码除符号位按位取反也就是1改成0,0改成1。

补码

反码加1则得到补码。

我们再回到之前的问题

int main()
{
    int a = 20;
     //00000000 00000000 00000000 00010100 正数的原码,反码,补码相同
    int b = -10;
//原码 10000000 00000000 00000000 00001010
//反码 11111111111111111111111111111110101
//补码 11111111111111111111111111111110110
    return 0;
}

 上面的内存是怎么来的呢?

对于整形来说,数据存放内存的时候其实存放的是补码。

这里面的存储是16进制,也就是4位2进制转化为1个16进制。

int main()
{
    int a = 20;
     //0000 0000 0000 0000 0000 0000 0001 0100
     //  0    0    0    0    0    0    1    4
     //        0x00000014
    int b = -10;
//原码 10000000 00000000 00000000 00001010
//反码 11111111111111111111111111111110101
//补码 1111 1111 1111 1111 1111 1111 1111 1111 0110
//       F    F    F    F    F    F    F    F    6
//             0xFFFFFFF6
    return 0;
}

2.大端存储和小端存储

2.1什么是大端小端?

大端存储模式:是指数据的低位保存到高地址处,数据的高位保存到低地址处。

小端存储模式:是指数据的低位保存到低地址处,数据的高位保存到高地址处。

              大端存储   小端存储          

低地址         14             00

                    00             00

                    00             00

高地址         00             14

2.2如何判断机器是大端存储还是小端存储?

这里用代码的形式来实现。

通过指针里的数据进行判断。

#include <stdio.h>
int main()
{
    int a = 1;
    char* p = (char*)(&a);
    if (*p == 1)
    {
        printf("小端存储\n");
    }
    if (*p == 0)
    {
        printf("大端存储\n");
    }
    return 0;
}

 而我的电脑也很明显是小端存储了。

举报

相关推荐

0 条评论