【发布时间】:2017-09-14 10:57:07
【问题描述】:
如何正确使用 unsigned int?当用户输入a 小于b 时,我的函数unsigned int sub(int num1, int num2); 不起作用。如果我简单地使用 int,我们可以期待一个否定的答案,我需要在减去之前确定哪个更大。我知道这很容易,但也许有办法使用 unsigned int 来避免这种情况?
例如,当a = 7 和b = 4 时,答案是 3.000000。但是当我翻转它们时,代码给了我 4294967296.000000 我认为这是一个内存地址。
#include <stdio.h>
unsigned int sub(int num1,int num2){
unsigned int diff = 0;
diff = num1 - num2;
return diff;
}
int main(){
printf("sub(7,4) = %u\n", sub(7,4));
printf("sub(4,7) = %u\n", sub(4,7));
}
输出:
sub(7,4) = 3
sub(4,7) = 4294967293
【问题讨论】:
-
从有符号转换为无符号不会导致采用绝对值。它会导致modular arithmetic 转换。
-
您期望从 a=4, b=7 案例中得到什么?
-
@Cornstalks 啊,你是对的,绝对值一定是最好的方法
-
几乎所有发布的代码都不相关,而 与 相关的部分取决于您未显示的用户输入。至少说出你想要什么输出。
-
是的,
unsigned的意思是没有符号,也就是说不能为负数。如果需要允许负值,则不能使用unsigned。出于兴趣,您认为这是什么意思?