首页 > 解决方案 > 整数文字如何映射到内存中?

问题描述

看看下面的例子:

int a = 130;
char *ptr;
ptr = (char *) &a;
printf("%d", *ptr);

我希望0在屏幕上打印一个值,但令我惊讶的是它是-126. 我得出的结论是,由于char是 8 位,因此int可能会四舍五入。

直到现在我一直认为内存是以msb在左边的方式填充的。但现在一切似乎都是喜忧参半。内存究竟是如何分配的?

标签: c

解决方案


在您的情况下a(可能是)4字节的小端值。130 是二进制的 10000010。

int a = 130; // 10000010 00000000 00000000 00000000 see little endianness here

你指向第一个字节char*

char* ptr = (char*)&a; // 10000010

并尝试使用%d将打印有符号整数值的格式打印10000010-126(请参阅:二进制补码


推荐阅读