gpt4 book ai didi

c - 在 C 中使用无符号数据类型

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:45 24 4
gpt4 key购买 nike

如何正确使用unsigned int?当用户输入 a 小于 b 时,我的函数 unsigned int sub(int num1, int num2); 不起作用。如果我简单地使用 int,我们可以期待一个否定的答案,我需要在减去之前确定哪个更大。我知道这很容易,但也许有一种方法可以使用 unsigned int 来避免这种情况?

例如,当 a = 7 且 b = 4 时,答案为 3.000000。但是当我翻转它们时,代码会给出 4294967296.000000,我认为这是一个内存地址。

#include <stdio.h>

unsigned int sub(int num1,int num2){
unsigned int diff = 0;
diff = num1 - num2;
return diff;
}

int main(){
printf("sub(7,4) = %u\n", sub(7,4));
printf("sub(4,7) = %u\n", sub(4,7));
}

输出:

sub(7,4) = 3
sub(4,7) = 4294967293

最佳答案

无符号数是无符号...这意味着它们不能为负数。相反,它们会换行(下溢或溢出)。

如果你用 8 位无符号数做一个实验,那么你可以看到从 0 中减去 1 的效果:

#include <stdio.h>
#include <stdint.h>

int main(void) {
uint8_t i;

i = 1;

printf("i: %hhu\n", i);

i -= 1;

printf("i: %hhu\n", i);

i -= 1;

printf("i: %hhu\n", i);

return 0;
}
i: 1
i: 0
i: 255

255 是 8 位无符号数可以容纳的最大值 (2^8 - 1)。


然后我们可以使用您的 4 - 7 对 32 位无符号数进行相同的实验:

#include <stdio.h>
#include <stdint.h>

int main(void) {
uint32_t i;

i = 4;

printf("i: %u\n", i);

i -= 7;

printf("i: %u\n", i);

return 0;
}
i: 4
i: 4294967293

4294967293 实际上是 0 - 3,它换行到 2^32 - 3


您还需要注意将整数值(sub() 函数的返回类型)分配给 float...通常这是避免。

见下文。 x()unsigned int 的形式返回 4294967293,但它存储在 float 中……这 float 然后打印为 4294967296???

#include <stdio.h>
#include <stdint.h>

unsigned int x(void) {
return 4294967293U;
}

int main(void) {
float y;

y = x();

printf("y: %f\n", y);

return 0;
}
y: 4294967296.000000

这实际上与float的精度有关...不可能将绝对值4294967293存储在float中。

关于c - 在 C 中使用无符号数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43474945/

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