一、文章来由
同属计算机储存,补码问题的延生~~
二、解密
答案输出是-128,为什么呢?
char型变量c中存储的是128的补码:10000000。上一篇文章已经说到,对于计算机来说,存储的都是数据的补码。
赋值给char型,debug模式下反汇编如下:
char c = 128;
00C6446E mov byte ptr [c],80h
char cc = c;
00C64472 mov al,byte ptr [c]
00C64475 mov byte ptr [cc],al
unsigned int ui = c;
00C64478 movsx eax,byte ptr [c]
00C6447C mov dword ptr [ui],eax
int i = c;
00C6447F movsx eax,byte ptr [c]
00C64483 mov dword ptr [i],eax
double d = c;
00C64486 movsx eax,byte ptr [c]
00C6448A cvtsi2sd xmm0,eax
00C6448E movsd mmword ptr [d],xmm0
00C64478 movsx eax,byte ptr [c]
使eax寄存器扩展成为 0xFFFFFF80,扩展在这一步~~