C语言实现求绝对值的问题

iuzhao 2012-05-09 10:22:18
#include <stdio.h>
void main()
{
int num;
printf("Enter a negative number:\n");
scanf("%d",&num);
num=~0^num;
printf("the absolute value:%d\n",num+1);
}

此方法在32位系统下,临界值有问题,求高手正解,或,其它方法
...全文
2138 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
諾不輕許 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
num=~0^num;

假设num的位是“0000 0000 0000 1001”
这条语句的意思是

0^num=“0000 0000 0000 1001”
~=“1111 1111 1111 1001”

获得的是反码,反码=相反数?!
[/Quote]
引用错了,应该是这。。
諾不輕許 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
abs,fabs
[/Quote]
计算机里表示负数是用正数的反码加1得来的,所以LZ的算法是可以的,只不过32位机子上,最大的正数2147483647,而最大的负数为-2147483648,当遇到最大的负数时,取绝对值int的正数是表示不了的,
所以会出错。
只要你是将num申明为int的,用if(num < 0) num = -num; 这个方法也会出错的。
自信男孩 2012-05-10
  • 打赏
  • 举报
回复
为什么不用:unsigned int类型呢?或者fabs函数。
quwei197874 2012-05-10
  • 打赏
  • 举报
回复
用math库
景语 2012-05-10
  • 打赏
  • 举报
回复
num=~0^num;

假设num的位是“0000 0000 0000 1001”
这条语句的意思是

0^num=“0000 0000 0000 1001”
~=“1111 1111 1111 1001”

获得的是反码,反码=相反数?!
qq120848369 2012-05-10
  • 打赏
  • 举报
回复
abs,fabs
iuzhao 2012-05-10
  • 打赏
  • 举报
回复
突然想起来忘了int类型整数的范围了,9楼说的对,谢谢大家的意见。还有就是那个库函数abs,fabs是怎么实现求绝对值的?
諾不輕許 2012-05-10
  • 打赏
  • 举报
回复
LZ实在是想这样的话,最后输出时,强转为无符号的就行了.
printf("the absolute value: %u\n", (unsigned int) (num + 1));
ljhhh0123 2012-05-09
  • 打赏
  • 举报
回复
那要看楼主的需求了,对输入有何要求,如果用户保证输入的是整数,那只用判断头一个字符是否负号就可以了。
临界问题要看你是哪个界了。
#include <stdio.h>
int main()
{
char num[512];
char *p;
printf("Enter a negative number:\n");
scanf("%s",&num);
if(num[0]=='-') p=&num[1];else p=num;
printf("the absolute value:%s\n",p);
}
lbq199204 2012-05-09
  • 打赏
  • 举报
回复
请问那个内存的实际位是什么意思,或者说要具备哪些知识,是数据结构的知识嘛?
[Quote=引用 2 楼 的回复:]
楼主通过位运算来求绝对值算是不错的了。但是你要把边界值在内存的实际位理解了再动手哦。

C/C++ code

#include <stdio.h>
int main()
{
int num;
printf("Enter a negative number:\n");
scanf("%d",&num);
if(num<0)
num=-num;
printf("the……
[/Quote]
W170532934 2012-05-09
  • 打赏
  • 举报
回复
楼主通过位运算来求绝对值算是不错的了。但是你要把边界值在内存的实际位理解了再动手哦。

#include <stdio.h>
int main()
{
int num;
printf("Enter a negative number:\n");
scanf("%d",&num);
if(num<0)
num=-num;
printf("the absolute value:%d\n",num);
return 0;
}
luzkingforever 2012-05-09
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
int num;
printf("Enter a negative number:\n");
scanf("%d",&num);
if(num<0)
num=-num;
printf("the absolute value:%d\n",num);
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧