size_t
和ptrdiff_t
数据类型的文章,可以在这里找到。当我看到这个例子时,需要注意以下代码:int A = -2;
unsigned B = 1;
int array[5] = { 1, 2, 3, 4, 5 };
int *ptr = array + 3;
ptr = ptr + (A + B); //Error
printf("%i\n", *ptr);
我无法理解两件事情。首先,如何将一个signed
和一个unsigned
数字相加并将结果转换为unsigned
类型?如果结果确实是unsigned
类型的0xFFFFFFFF
,那么在32位系统中,当与ptr
相加时,为什么会被解释为ptr-1
,考虑到这个数字实际上是unsigned
类型,而前导位1不应该表示符号?
其次,在64位系统中为什么结果不同?
请问有人能解释一下吗?