c语言强制转换,把负数转换成正数!

int c,a=6,b=8;
c=(unsiged)(6-8);
printf("%d",c)
为什么还是负数,同时希望那位高手告诉
应该怎样写,才能让c=2,负数转换成正数,在此谢过!

用0-t就OK

int c,a=6,b=8;
c=(unsiged)(6-8);
c=-c;
printf("%d",c);

如果是已知负数,用取到他的补码就OK,也就是用0-t就可以得到。

C储存int是4个字节,低位储存高字节,高位储存低字节。
-2在C内存是 1110 1111 1111 1111 1111 1111 1111 1111
2在C内存是 0010 0000 0000 0000 0000 0000 0000 0000
但算法的时候,c已经作了处理,-t的时候就已经按高低位取反加1了
温馨提示:答案为网友推荐,仅供参考
第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);
相似回答