一、问题描述
在MIPS64位架构下执行如下强制转换时,第3行代码会出现精度丢失错误,程序无法编译通过:
第1行 unsigned char a =0;
第2行 unsigned char *pa =&a;
第3行 int addr =( int ) pa;
但是同样的代码在win32平台下(vs 2017)下可正常编译运行。
二、原因分析
在MIPS64位架构下,指针类型为64位,即8个字节。而int类型为32位,4个字节。所以在进行强制转换时,由于字节长度不匹配,将会出现精度丢失。在MIPS64下,long型为64位,8字节,因此可以将上述的第3行代码改为如下:
第3行 long addr =( long ) pa;
此时再次编译将不会报错。
在win32平台下不会编译报错,是因为指针与int型都是32位,4字节,因此不会出现精度丢失的问题。