首页 > 试题广场 >

math.h的abs返回值()

[单选题]
math.h的abs返回值()
  • 不可能是负数
  • 不可能是正数
  • 都有可能
  • 不可能是0
哦凑,中枪了= =!  我再补充几点吧。
c中的函数申明为 int abs(int num);
正常情况下,
num为0或正数时,函数返回num值;
当num为负数且不是最小的负数时(不要问我最小的int类型负数是多少,上面那个图里面有真相),函数返回num的对应绝对值数,即将内存中该二进制位的符号位取反,并把后面数值位取反加一;
当num为最小的负数时(即0x80000000),由于正数里int类型32位表示不了这个数的绝对值,所以依然返回该负数。
这就是设计这个库函数的时候为什么把返回值设置为int而不是unsigned的原因,当然如果把返回值设置为unsigned是不是更加合理呢,这个也许有更好的解释,期待...
发表于 2015-11-15 23:23:21 回复(4)
更多回答
推荐
答案是C
 因为负数的范围比正数大一个,比如8位的二进制,可以表示范围为-128~127
所以abs(-128)可能并不能表示为128
所以只能返回原值
提供者:闻波大神,http://www.nowcoder.com/profile/581261
编辑于 2015-11-15 22:50:35 回复(9)
If the result cannot be represented by the returned type (such as abs(INT_MIN) in an implementation with two's complement signed values), it causes  undefined behavior .

对于最小的情况C++没有规定怎么做,具体看编译器的实现。
发表于 2016-04-23 09:40:28 回复(0)
万万没想到啊!!!-128的绝对值没法表示...
发表于 2016-11-15 15:21:10 回复(1)
因为负数的范围比正数大一,所以取最小的数取绝对值时,可能返回的还是负数。
这题一定要注意深入理解库函数。
发表于 2016-05-20 12:33:53 回复(0)
有可能是未定义行为。下图摘自cppreference.com 
ps: 本题是math.h中的abs,属于C语言标准库。C++中的abs和C中的不一样。
发表于 2017-03-22 21:45:15 回复(1)

num为最小负数时,abs返回原值

发表于 2020-02-04 16:18:58 回复(0)
C语言 stdlib.h 中的 abs() 返回  0x80000000 是负数
C++   cmath 头文件中的结果正常
发表于 2017-09-08 20:21:49 回复(0)

负数的最小值和比正数的最大值 除去符号部分要大一


发表于 2019-08-11 22:06:11 回复(0)
炫头像
abs()方法是对括号中运算的结果取绝对值
发表于 2015-10-27 23:00:25 回复(0)
math.h的abs:abs是绝对值的缩写
发表于 2015-10-26 16:35:08 回复(0)
最小负数返回原值
发表于 2023-04-11 11:43:42 回复(0)
当num为0或正数时,函数返回num值; 当num为负数且不是最小的负数时(即0x80000000),函数返回num的对应绝对值数,即将内存中该二进制位的符号位取反,并把后面数值位取反加一; 当num为最小的负数时,由于正数里int类型32位表示不了这个数的绝对值,所以依然返回该负数
发表于 2023-03-06 23:59:31 回复(0)
选择 C abs不是绝对值函数吗
发表于 2019-09-29 18:12:53 回复(0)
不要忽略最小负数。
发表于 2018-11-27 17:37:18 回复(0)
 public static int abs(int a) {
        return (a < 0) ? -a : a;
    }
可怜的java

发表于 2018-02-21 14:13:32 回复(0)
C
发表于 2015-11-25 23:50:39 回复(0)