gpt4 book ai didi

c - C 中无符号短整型的加法和减法

转载 作者:行者123 更新时间:2023-11-30 20:55:22 25 4
gpt4 key购买 nike

我遇到了一些问题,这让我发疯。

我有这样的代码

float a;
unsigned short b;

b += a;

a为负时,b就会变得疯狂。

我什至还做了 Actor

b += (unsigned short) a;

但它不起作用。

我做错了什么?如何将 float 添加到无符号短整型中?

仅供引用:当 'a' 为 -1 并且 b 为 0 时,我会看到 'b +=a' 将给出 b = 65535。

最佳答案

float 添加到unsigned Short 的方法就是简单地添加它,就像您所做的那样。加法的操作数将进行转换,如下所述。

基于您的代码的一个简单示例是:

#include <stdio.h>
int main(void) {
float a = 7.5;
unsigned short b = 42;
b += a;
printf("b = %hu\n", b);
return 0;
}

不出所料,输出是:

b = 49

声明

b += a;

相当于:

b = b + a;

(除了 b 仅计算一次)。当不同类型的操作数相加(或相减,或...)时,它们会根据一组规则转换为通用类型,您可以在 the C standard 中找到这些规则。第 6.3.1.8 节。在本例中,bunsigned Short 转换为 float。加法相当于 42.0f + 7.5f,得到 49.5f。然后,赋值将此结果从 float 转换为 unsigned Short,结果 49 存储在 b` 中。

如果加法的数学结果超出了float的范围(这不太可能),或者超出了unsigned Short的范围(这更不可能)可能),那么程序将具有未定义的行为。您可能会看到 b 中存储了一些垃圾值,您的程序可能会崩溃,或者原则上任何其他情况都可能发生。当您将有符号或无符号整数转换为无符号整数类型时,结果会被绕回;将浮点值转换为无符号类型时,不会发生这种情况。

如果没有更多信息,就不可能知道您实际上遇到了什么问题或如何解决它。

但添加一个unsigned short和一个float并将结果存储在一个unsigned Short中似乎是一件不寻常的事情。在某些情况下,它可能正是您所需要的(如果是这样,您需要避免溢出),但您最好将结果存储在 unsigned Short 之外的其他位置,也许在floatdouble。 (顺便说一下,对于 float 据,doublefloat 使用得更频繁;float 主要用于当您有 >很多数据。)

如果您正在进行数值转换,即使是隐式转换,通常(但并非总是)表明您应该首先使用不同类型的变量。

关于c - C 中无符号短整型的加法和减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509876/

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