2012-11-06 27 views
1

我想如果某個整數是由scanf寄存器中,那麼這個數字就是2s補碼錶示。我可以通過printf獲取該號碼嗎?我搜索了很多網站,但無法找到C初學者的代碼...可以從寄存器中獲得整數的二進制補碼錶示嗎?

+3

歡迎堆棧溢出!你的問題有點含糊 - 你能試着更好地解釋你想做什麼嗎?顯示一些代碼通常有助於告訴我們問題是什麼。特別是,短語「float」和「2的補碼」通常不會一起出現。 –

+0

'float'在內部不使用2的補碼,維基百科關於2的補碼的文章甚至不提及用於非整數的內容。 –

+0

謝謝你們我編輯了這個問題... – user1802087

回答

0

浮點數不是存儲在2的補碼中,而是存儲在IEEE 754中。要打印某些二進制數據的二進制表示,請首先參閱https://stackoverflow.com/a/112956/1689451。你可以把你的浮點數組合成一個整數來提取單個字節:

#include <stdio.h>  /* printf */ 
#include <string.h>  /* strcat */ 

// taken from https://stackoverflow.com/a/112956/1689451 
const char *byte_to_binary(int x) 
{ 
    static char b[9]; 
    b[0] = '\0'; 

    int z; 
    for (z = 128; z > 0; z >>= 1) 
    { 
     strcat(b, ((x & z) == z) ? "1" : "0"); 
    } 

    return b; 
} 

union { 
    float f; 
    unsigned char b[4]; 
} x; 

x.f = 0.34; 
for (int i = 0; i < 4; i++) { 
    printf("%s", byte_to_binary(x.b[i])); 
} 

我沒有試過這個例子;可能不會編譯,但應該提供正確方向的提示。

0

在c中沒有標準打印「二補數」或二進制數字,如果這是你的問題。這項任務必須分開解決。例如。

for (i=0;i<32;i++) putc('0'+((number >> (31-i)) & 1)); //或複製到本地串

否則scanf("%f", &my_float);打印與printf("%f", my_float);