C语言类型转换
- 无符号数小范围转大范围:不改变数据内容
- 无符号数大范围转小范围:先截断,然后解释
- 有符号数小范围转大范围:进行符号扩展
- 有符号数大范围转小范围:先截断,然后解释
- 有符号与无符号互转:不改变数据内容,改变解释方式
- 无符号数转有符号大范围:不改变数据内容
- 无符号数转有符号小范围:先截断,然后解释
- 有符号数转无符号大范围:先进行符号扩展,然后改变解释方式
- 有符号数转无符号小范围:先截断,然后解释
int8_t
- int8_t -> uint8_t: 不改变数据内容,改变解释方式
- int8_t -> int16_t: 进行符号扩展
- int8_t -> uint16_t: 先进行符号扩展转为int16_t,然后改变解释方式
- int8_t -> int32_t: 进行符号扩展
- int8_t -> uint32_t: 先进行符号扩展转为int32_t,然后改变解释方式
uint8_t
- uint8_t -> int8_t: 不改变数据内容,改变解释方式
- uint8_t -> int16_t: 不改变数据内容
- uint8_t -> uint16_t: 不改变数据内容
- uint8_t -> int32_t: 不改变数据内容
- uint8_t -> uint32_t: 不改变数据内容
int16_t
- int16_t -> int8_t: 先截断,然后解释
- int16_t -> uint8_t: 先截断,然后解释
- int16_t -> uint16_t: 不改变数据内容,改变解释方式
- int16_t -> int32_t: 进行符号扩展
- int16_t -> uint32_t: 先进行符号扩展转为int32_t,然后改变解释方式
uint16_t
- uint16_t -> int8_t: 先截断,然后解释
- uint16_t -> uint8_t: 先截断,然后解释
- uint16_t -> int16_t: 不改变数据内容,改变解释方式
- uint16_t -> int32_t: 不改变数据内容
- uint16_t -> uint32_t: 不改变数据内容
int32_t
- int32_t -> int8_t: 先截断,然后解释
- int32_t -> uint8_t: 先截断,然后解释
- int32_t -> int16_t: 先截断,然后解释
- int32_t -> uint16_t: 先截断,然后解释
- int32_t -> uint32_t: 不改变数据内容,改变解释方式
uint32_t
- uint32_t -> int8_t: 先截断,然后解释
- uint32_t -> uint8_t: 先截断,然后解释
- uint32_t -> int16_t: 先截断,然后解释
- uint32_t -> uint16_t: 先截断,然后解释
- uint32_t -> int32_t: 不改变数据内容,改变解释方式