首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新苹果硅(arm64)与x86_64双转换和x86_64转换的不同行为

新苹果硅(arm64)与x86_64双转换和x86_64转换的不同行为
EN

Stack Overflow用户
提问于 2021-12-07 10:47:32
回答 1查看 272关注 0票数 0

码头工人。gcc10 in arm64 debian.gcc7 in x86_64 debian.

代码语言:javascript
复制
#include <cstdio>
#include <limits>
#include <cstdint>

int main(int args, char *argv[]) {
        double d = std::numeric_limits<int64_t>::max();
        int64_t t = static_cast<int64_t>(d);
        printf("%lld\n", t);
        return 0;
}

输出:

  • arm64: 9223372036854775807
  • x86_64:-9223372036854775808

有人能帮我理解为什么会有不同吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-07 11:32:52

答案是ARM体系结构在转换中溢出的不同行为(在本例中为int64_t )。它是在这里记录的(对于ARMv7):https://developer.arm.com/documentation/ddi0403/d/Application-Level-Architecture/Application-Level-Programmers--Model/The-optional-Floating-point-extension/Floating-point-data-types-and-arithmetic?lang=en

TL:DR:最大可表示值用于ARM (int64_t为9223372036854775807)。( @PeterCordes猜测)

编辑:对于x86 / x64,溢出将导致一个整数,只有MSB设置(在int64_t情况下为-9223372036854775808 )。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70258776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档