C:将有符号转换为无符号

C:将有符号转换为无符号,c,signed,unsigned-integer,C,Signed,Unsigned Integer,事实上,我可能有一个简单的问题。所以我不知道如何将有符号整数转换为无符号整数 我的代码: signed int entry = 0; printf("Decimal Number : "); scanf("%d", &entry); unsigned int uEntry= (unsigned int) entry; printf("Unsigned : %d\n", uEntry); 如果我将无符号值发送到控制台查看最后一行代码,我总是返回一个有符号整数 你能帮我吗 非常感谢 亲切的

事实上,我可能有一个简单的问题。所以我不知道如何将有符号整数转换为无符号整数

我的代码:

signed int entry = 0;
printf("Decimal Number : ");
scanf("%d", &entry);
unsigned int uEntry= (unsigned int) entry;
printf("Unsigned : %d\n", uEntry);
如果我将无符号值发送到控制台查看最后一行代码,我总是返回一个有符号整数

你能帮我吗

非常感谢

亲切的问候,亲

printf("Unsigned : %u\n", uEntry);
//                 ^^

您必须使用%u说明符来告诉printf运行时输入是一个无符号的int。如果使用%d,printf函数将期望一个int,从而将您的输入重新解释回一个有符号的值。

将这两行追加到代码的末尾,您将了解发生了什么

printf("entry: signed = %d, unsigned = %u, hex = 0x%x\n", entry, entry entry);
printf("uEntry: signed = %d, unsigned = %u, hex = 0x%x\n", uEntry,uEntry,uEntry);

嗨,肯尼,谢谢你的回答。如果我设置了%u说明符,我将得到-13的无符号值4294967283。有什么问题吗。谢谢,没问题。这是变量位的无符号表示。@pro:如果格式说明符与正在打印的值的类型不匹配,则行为未定义,结果没有意义。也就是说,当你用%u打印-13时,结果是没有意义的。以及您最初打印带有%d的无符号值的尝试。如果希望输出有意义,请始终使用正确的格式说明符:%u表示无符号整数,%d表示有符号整数。@pro:-13表示无符号整数超出范围。当您将超出范围的数字转换为无符号类型时,将通过重复增加或减去该类型最大值的一个来将其纳入范围-在本例中,UINT_MAX+1,在您的平台上是4294967296,被添加到-13,得到4294967283。嗨,伙计们,谢谢你们的回答和评论。它非常有用!虽然在解释特定实现如何工作时可能会提供一些信息,但这两个调用都会导致未定义的行为。您必须根据在格式字符串中指定的内容,为printf提供正确的类型,才能很好地定义结果。