浪子不回头415 2025-03-14 10:31 采纳率: 0%
浏览 18

uint64_t的赋值问题?

img


好神奇,i=0,y_index=i,然后y_index=140737488?

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-03-14 10:31
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    uint64_t的赋值问题?

    你遇到了一个非常有趣的问题! 😄

    在 C++ 中,uint64_t 是一个 unsigned 64 位整数类型。现在,你的问题是:i = 0y_index = i,然后 y_indexuddenly 变成了 140737488

    这是因为在 C++ 中,intuint64_t 都是 32 位整数类型,而 uint64_t 是 unsigned 的。所以,当你将 i(一个 signed 32 位整数)赋值给 y_index(一个 unsigned 64 位整数)时,会发生一个隐式转换。

    在这个转换过程中,i 的值(0)会被扩展到 64 位 unsigned 整数的范围内。这意味着,y_index 的值将变成 0 的扩展值,即 0

    但是,在你的例子中,y_index 的值变成了 140737488。这是因为在 C++ 中,intuint64_t 都是使用 2 的补码表示的。补码是指将整数转换为二进制表示,然后将所有位反转,并加上 1。

    在你的例子中,i 的值是 0,0 的补码是 0。然后,y_index 的值是 0 的扩展值,即 0 的补码,即 0

    因此,y_index 的值变成了 140737488。这个值是 0 的补码。

    总的来说,这是一个非常有趣的问题! 😄

    评论

报告相同问题?

问题事件

  • 创建了问题 3月14日