C 打印无符号短值
给出了输出C 打印无符号短值,c,C,给出了输出a:4464何时应该是a:70000是否有更好的方法将ASCII转换为十进制?无符号空头的范围是0-65535你自己在回答这个问题。无符号短字符的范围是0-65535,因此70000不适合它(2个字节),请使用4个字节的数据类型(无符号int应该可以工作,您可以使用sizeof检查大小)。因为,您可能遇到了溢出问题 但是在回答关于输出无符号值的printf问题时,您需要u修饰符(用于“无符号”)。在这种情况下,正如Jens在下面指出的,您需要%hu: unsigned short
a:4464
何时应该是a:70000
是否有更好的方法将ASCII转换为十进制?无符号空头的范围是0-65535你自己在回答这个问题。无符号短字符的范围是0-65535,因此70000不适合它(2个字节),请使用4个字节的数据类型(无符号int
应该可以工作,您可以使用sizeof
检查大小)。因为,您可能遇到了溢出问题
但是在回答关于输出无符号值的printf
问题时,您需要u
修饰符(用于“无符号”)。在这种情况下,正如Jens在下面指出的,您需要%hu
:
unsigned short a;
char temp[] = "70000";
a = atoi(temp);
printf("a: %d\n", a);
…虽然只要%u
(unsigned int
,而不是unsigned short
)可能也会起作用,因为short
在printf
的堆栈上推送时会升级为int
但是,同样,只有当值70000适合您平台上的无符号short
。这是我的计算机科学作业,我们必须使用数据类型unsignedshort@mateo:嗯,你不能将70000放入2个字节,句号。如果作业要求你尝试,答案是“我不能,你也不能,老师”。如果你想让我们回答的话,请再读一遍,告诉我们确切的措辞。在这种情况下,你只能在两条未签名的短裤中储存70000英镑,但不能在一条短裤中储存70000英镑。听起来真奇怪。@Jens:谢谢。C标准中是否定义了h
说明符?(不是C++,不是特定的编译器)我的回忆(这是生锈的)是,当代码被推到堆栈上时,代码<>代码>短代码>代码> >在VARARGS情况下,如代码> PRINTF。编辑:我从中得到了预期的输出(426000042
),例如:gcc-Wall
没有给我任何警告(gcc4.4.3)。但当然,这可能只是一些帮助我的东西,可能是特定于我的架构或编译器,等等:-)是的,它是C99。是的,如果unsigned short
适合该参数,则将该参数提升为int
,否则unsigned int
。但这只是另一回事,格式说明符告诉printf
如何解释它接收到的int
。
printf("a: %hu\n", a);