C++ 中 char 变量的内存分配问题,通过 visual studio 调试器
Problem in memory allocation of char variable in C++, through visual studio debbuger
char
是一种在 C++ 中只有一个字节的类型,我们可以将其用作 signed
或 unsigned
,更改它可以分配的值。我是 Visual Studio 中使用调试器的新手,也是阅读内存的新手。我正在使用以下代码:
int main() {
signed char a = 170;
signed char* b = &a;
}
a
变量的取值范围应该是-128到127,变量的值转换后-86结算,但是当我得到b
变量的值时,是内存分配,看看我得到了什么:
0x0019F99B aa cc cc cc cc 6d f3 ea 54 c4 f9 19 00 13 1f a0 00 01 00 00 00 60 78 76 00 d0 b5 76 00 01 00 00 00 60 78 76 00 d0 b5 76 00 20 fa 19 00 67 1d a0 00 e9 f0 ea 54 23 10 a0 00 23 10 a0 00 00 60 ªÌÌÌÌmóêTÄù.... .....`xv.еv.....`xv.еv. ú..g. .éðêT#. .#. ..
但是 aa 的十六进制计算结果为 170。发生了什么事?
170
文字是 int
,由 0x000000AA
表示。
当您将其转换为单个字节 signed char
时,它只是截断字节,因此您最终得到 0xAA
,这恰好是二进制补码表示法中的 -86
.
char
是一种在 C++ 中只有一个字节的类型,我们可以将其用作 signed
或 unsigned
,更改它可以分配的值。我是 Visual Studio 中使用调试器的新手,也是阅读内存的新手。我正在使用以下代码:
int main() {
signed char a = 170;
signed char* b = &a;
}
a
变量的取值范围应该是-128到127,变量的值转换后-86结算,但是当我得到b
变量的值时,是内存分配,看看我得到了什么:
0x0019F99B aa cc cc cc cc 6d f3 ea 54 c4 f9 19 00 13 1f a0 00 01 00 00 00 60 78 76 00 d0 b5 76 00 01 00 00 00 60 78 76 00 d0 b5 76 00 20 fa 19 00 67 1d a0 00 e9 f0 ea 54 23 10 a0 00 23 10 a0 00 00 60 ªÌÌÌÌmóêTÄù.... .....`xv.еv.....`xv.еv. ú..g. .éðêT#. .#. ..
但是 aa 的十六进制计算结果为 170。发生了什么事?
170
文字是 int
,由 0x000000AA
表示。
当您将其转换为单个字节 signed char
时,它只是截断字节,因此您最终得到 0xAA
,这恰好是二进制补码表示法中的 -86
.