第1个回答 2010-08-24
1. 为什么还是负数?
因为你在打印的时候使用的是%d,而不是%u,所以是有正负的。
2.怎么才能让c=2?
如果只是简单的强转会是一个很大的数4294967294
你要想输出2就必须用绝对值(abs),如果知道肯定是负数可以
c = -2;
c = ~c + 1;
这样就块可以变成2了。
第2个回答 推荐于2017-12-16
用绝对值就行了:
c = abs(6-8);
要#include <math.h>本回答被提问者采纳
第3个回答 2010-08-24
#include<stdio.h>
#define Abs(x) ((x)<0?(-(x)):(x))
int main(){
int c,a=6,b=8;
c=Abs(6-8);
printf("%d\n",c);
}
强制转换成unsigned型的话,虽然也可以变成正数,但它的大小就改变了,要这么写才能转换成unsigned型:
int a=6,b=8;
printf("%u\n",(unsigned int)(a-b));
第4个回答 2010-08-24
#include <math.h>
c = abs(a-b);
或者
c = (a-b)>0 ? a-b : b-a;
或者
#include <windows.h>
c = max(a-b,b-a);