我想理解为什么输出显示为无符号短路溢出而不是无符号长溢出?这是一个例子吗?
#include <stdio.h>
#include <stdlib.h>
unsigned short us(float s);
unsigned long ul(float l);
float a = -10;
int main()
{
printf("us method return: %d ", us(a));
printf("\nul method return: %d ", ul(a));
return 0;
}
unsigned short us(float s)
{
return (s + 1);
}
unsigned long ul(float l)
{
return (l + 1);
}
输出是:
us method return: 65527
ul method return: -9
答案 0 :(得分:2)
%d
期望参数为int
类型。
printf()
是一个可变函数,对每个参数执行整数提升。
提供unsigned short
后,可以将其提升为int
,但unsigned long
(排名高于int
)不能升级到int
,因此您最终会向%d
提供错误类型的参数,该参数将调用undefined behavior。
您应该使用%lu
打印unsigned long
值。