有符号数到无符号数转换时遇到的问题

  最近在调试问题时发现,在调用API读写一个地址时,发现只要访问这个地址程序就会异常,使用trace32跟踪发现,存放地址的X0寄存器的值的低32位是对的,就是我们期望的地址,但是高32位全部为1,对应的汇编指令是ldr w1, [x0],从而导致CPU访问了一个不存在的地址。

  经过分析发现,这个API的形参中存放地址的变量的数据类型是int,但是实际访问地址用的却是unsigned long类型,这样就会涉及到有符号数转换为无符号数的转换。如果有符号数的最高位为1的话,在转换为无符号数时,会进行符号扩展,导致高32位全部变成了1,这样就会变成一个很大的地址,所以存放地址的变量必须要用无符号类型

原文地址:https://www.cnblogs.com/pengdonglin137/p/11097785.html