2015-11-02 97 views
-3

我試圖對64位變量進行大於32的移位操作。 有人可以告訴我的代碼搞砸了嗎?對於64位變量,按位移> = 32操作C

處理器architechture是AMD64和開發環境Visual Studio的社區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 

我一直在思考在這整個上午現在.. 我真的是一個初學者與C上比嵌入式8位體系結構:)

-Codester

+3

%×32bit的打印變量 – Hcorg

+0

使用調試器,而不是printf的 – BeyelerStudios

+0

也許'%lx'爲64位。或者把'printf'轉換成'double'。 – i486

回答

2

增加額外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

4
  • uint64_t x = ~0;

    此代碼如果int是32位將不起作用。如果您想以便攜方式將uint64_t設置爲「全部」,則需要執行uint64_t x = ~(uint64_t)0;

  • %8x

    這不是uint64_t正確的格式說明。你應該使用PRIx64inttypes.h。例如:

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