输出:000000f7, fffffff7
unsigned int到unsigned char直接截断,取低字节。
(char*)&a 将a的地址转换成一个char型指针,和(int*)&a 转换成一个int是不同,它只会指向&a的低8位内存,其余的发生了截断。
所以unsigned int a = 0xFFFFFFF7; 改为unsigned int a = 0x1FFFFFF7; 输出等等*b还是fffffff7。现在b指向的是0xf7, 这是一个负数,使用%08x 输出 就是ffffffff7.因为数据在计算机中都是以补码形式存在的,正数进行位扩展的话是零扩展,负数进行位扩展的话是符号扩展,即在符号位后不足的位数补上最高有效位的值。