- 规则:有符号数扩展符号位,无符号数扩展0
一个小测试如下:
#include <stdio.h>
#include <stdint.h>
void test1(){
uint8_t x=0x8f;// 1000 1111
int y1=x;
unsigned int y2=x;
printf("%x\n",y1);
printf("%x\n",y2);
}
void test2(){
int8_t x=0x8f;// 1000 1111
int y1=x;
unsigned int y2=x;
printf("%x\n",y1);
printf("%x\n",y2);
}
int main(){
test1();
test2();
return 0;
}
输出结果
8f
8f
ffffff8f
ffffff8f
解释:8位的x扩展为32位的y1或y2,与y1和y2的类型无关,看的是x的类型,遵循原则:有符号数扩展符号位,无符号数扩展0。这里的符号指的是被扩展数x的符号而不是扩展结果y1/y2的符号