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
文字是由0x000000AA
表示的int
。
当您将其转换为单个字节的signed char
时,它只是截断字节,因此您最终得到0xAA
,它恰好是双补符号中的-86
。