【问题标题】:type promotion in C and type castingC 中的类型提升和类型转换
【发布时间】:2012-11-02 14:26:16
【问题描述】:

我有以下变量:

UWORD64 length;     
UWORD32 thumbnail_offset;
UWORD32 thumbnail_length;
UWORD64 sum;

这就是我想做的:

sum = (UWORD64)(thumbnail_offset + thumbnail_length);
main_image_length = (UWORD32)(length - sum);

但是,第一行给了我错误:conversion to non-scalar type requested

第二行给了我错误:invalid operands to binary - (have 'UWORD64' and 'UWORD64')

我不明白问题出在哪里。不应该提升低等的类型吗?为什么这会引起问题?

【问题讨论】:

  • UWORD64 是一个结构吗?否则您的代码应该可以正常工作。
  • 糟糕,是的,它是一个结构!
  • 在这种情况下我将如何处理?
  • 定义该结构的人可能还定义了一些函数来对其进行操作。如果没有,您将不得不自己编写。

标签: c operators type-conversion binary-operators


【解决方案1】:

很可能是类型 def 或未定义的值。我正在使用 MSVC 2012 并且只使用 Microsoft 内置类型。编译没有问题。

unsigned __int64 length = 100;     
unsigned __int32 thumbnail_offset = 32;
unsigned __int32 thumbnail_length = 25000000;
unsigned __int64 sum = 0;
unsigned __int32 main_image_length = 0;

//And this is what I want to do:

sum = (unsigned __int64 )(thumbnail_offset + thumbnail_length);
main_image_length = (unsigned __int32)(length - sum);

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 2011-12-28
    • 1970-01-01
    • 2011-12-18
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多