编程语言是怎么实现类型转换的,而计算机底层又是怎样处理各种类型数据的呢,好吧,源码说明一切。
code.c
int test()
{
unsigned char a=129;
char b=130;
char c=a;
int h=a;
char d=-2;
unsigned char e=d;
int i=d;
int j=a+d;
int k=-3;
int l=257;
char m=k;
char n=l;
unsigned char p=k;
unsigned char q=l;
}
将之汇编为code.s汇编代码:
code.s
subl $32, %esp
movb $-127, -1(%ebp) //立即数都转换为相应类型所占位数下的补码数据
movb $-126, -2(%ebp)
movb -1(%ebp), %al
movb %al, -3(%ebp)
movzbl -1(%ebp), %eax
movl %eax, -8(%ebp)
movb $-2, -9(%ebp)
movb -9(%ebp), %al
movb %al, -10(%ebp)
movsbl -9(%ebp), %eax
movl %eax, -16(%ebp)
movzbl -1(%ebp), %edx
movsbl -9(%ebp), %eax
addl %edx, %eax
movl %eax, -20(%ebp)
movl $-3, -24(%ebp)
movl $257, -28(%ebp)
movl -24(%ebp), %eax
movb %al, -29(%ebp)
movl -28(%ebp), %eax
movb %al, -30(%ebp)
movl -24(%ebp), %eax
m