簡體   English   中英

C 中 64 位變量的按位移位 >= 32 操作

[英]Bitwise shift >= 32 operation for 64 bit variable in C

我正在嘗試對 64 位變量進行比 32 長的移位操作。 有人可以告訴我的代碼出了什么問題。

處理器架構為 AMD64,開發環境為 Visual Studio Community 2015 和 DevC++

我的代碼如下所示:

#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
    uint64_t x = ~0;
    printf("x is %8x \n", x);
    x = ~((uint64_t)(1) << 31);
    printf("x is %8x \n", x);
    x = ~((uint64_t)(1) << 32);
    printf("x is %8x \n", x);
    return 1;
}

輸出是:

x is ffffffff
x is 7fffffff
x is ffffffff

我整個上午都在思考這個問題..我真的是一個初學者,使用比嵌入式 8 位架構更大的 C :)

-Codester

  • uint64_t x = ~0;

    如果int是 32 位,此代碼將不起作用。 如果你想以可移植的方式將uint64_t設置為“所有”,則需要執行uint64_t x = ~(uint64_t)0; .

  • %8x

    這不是uint64_t的正確格式說明符。 您應該使用inttypes.h PRIx64 例子:

     #include <inttypes.h> printf("x is %8" PRIx64 "\\n", x);

將額外的llX添加到 printf 格式解決了我的問題:

#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
    uint64_t x = ~0;
    printf("x is %8llX \n", x);
    x = ~((uint64_t)(1) << 31);
    printf("x is %8llX \n", x);
    x = ~((uint64_t)(1) << 32);
    printf("x is %8llX \n", x);
    return 1;
}

很多時候答案太簡單了:P

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM