gpt4 book ai didi

c - c中绝对值的写法

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:56 25 4
gpt4 key购买 nike

我知道这个解决方案很丑陋而且技术上不正确,但我不明白为什么代码不起作用。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (int argc, char *argv[]) {
int u;

scanf("%d", &u);
printf("absValue = %u\n", u);

return 0;
}

%u 指定一个无符号的十进制字符,但是当我输入一个负值时,它给出

absValue = 4294967293

或者,使用 if 命令,如何将负号转换为正号?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (int argc, char *argv[]) {
int n;

scanf("%d", &n);
if(n < 0) {
printf("absValue = -%d\n", n);
} else {
printf("absValue = %d\n", n);
}
return 0;
}

最佳答案

第一段代码中最短的解决方案是更改 printf声明如下:

    printf("absValue = %u\n", (unsigned)((u<0)?-u:u));

这将打印 u 的绝对值.类型转换 (unsigned)确保数据类型符合 printf 的预期.声明(u<0)?-u:u使用 conditional operator选择值 -u如果条件 ( u<0 ) 为真且 u如果条件为假(即 u>=0 )。

您的代码中的问题是 u是一个带符号的整数,这意味着它的值是使用 Two's complement representation 存储的4 个字节 (*) 和 printf不聪明。当你告诉 printf显示无符号整数,然后 printf将占用 4 个字节 u并将它们解释为无符号整数。由于二进制补码中的负数存储为大的正整数,这就是您看到的结果。

(*) 使用二进制补码和 int 4 的大小取决于机器,但很常见。

关于c - c中绝对值的写法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57858964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com