【发布时间】:2021-10-25 07:36:46
【问题描述】:
我将一个整数值转换为short,但是当我打印short的十六进制结果时,显示为4字节,我找不到原因。
#include <stdio.h>
void main()
{
int j = 53191;
short s = (short)j;
printf("s = %x",s);
}
输出:ffffcfc7
【问题讨论】:
-
见stackoverflow.com/a/50882761/1607937 - 你需要使用
%hx-> 演示:godbolt.org/z/3rG6Y9bsT -
另请注意,
shorts 的长度可以是 4 个字节。 -
根据@Jean-BaptisteYunès 的评论,您可能希望使用 typedef 的 stdint 集合来确保您的变量具有您期望的值范围。
int16_t用于 16 位有符号整数(短),uint16_t用于unsigned short。 -
如果不是default argument promotions,您将通过使用
"%x"(需要相应的unsigned值)和short类型的值来调用未定义行为。 -
@ᕮ_ᑐᑌᑎᕮ4 不,这不是这些帖子的重复,因为
%hx假定一个无符号参数。short不是未签名的。