C语言中printf输出long int十六进制结果不符的问题求助
解决long int十六进制输出结果不全的问题
你的问题出在格式符和数据类型不匹配:
%x是用来输出unsigned int类型(通常为32位)的十六进制格式符,而你的organization是long int类型(从预期结果看是64位)。当用%x输出时,会把64位的long int截断成32位输出,所以只得到了低32位的fffffe1f,缺失了高32位的ffffffff。
修正方法
要完整输出64位long int的十六进制补码,需要用对应64位的格式符,并确保类型匹配:
修改后的代码:
typedef struct database{ long int organization; } database; int main() { struct database database = {-481}; // 强制转换为unsigned long long,用%llx输出完整64位十六进制 printf("%llx\n", (unsigned long long)database.organization); return 0; }
说明
%llx是标准C中对应unsigned long long(64位无符号整数)的十六进制输出格式符,能保证输出完整的64位数据。- 将
long int强制转换为unsigned long long,可以让负数以64位补码的形式完整展示,正好得到你预期的fffffffffffffe1f。
内容的提问来源于stack exchange,提问作者slkjdfarrangement
相关产品推荐
相关产品推荐

