打印签名的二进制表示

时间:2015-01-11 16:48:56

标签: c++ c binary

我需要一个函数来打印带有符号的int的二进制表示,我有以下对正负整数都有效,它的作用是因为1 << 31 = 2147483648的无符号值,这是一个有效的方法做到了吗?

#include <stdio.h>

void printBinary(int n) {

    for (unsigned i = 1 << 31; i > 0; i = i >> 1) {
        if (i & n) {
            printf("1");
        } else {
            printf("0");
        }
    }
    printf("\n");
}

int main() {

    printBinary(2147483647); // 01111111111111111111111111111111
    printBinary(-2147483647); // 10000000000000000000000000000001
    printBinary(-2147483648); // 10000000000000000000000000000000
    printBinary(2147483648); // can't be represented, will produce wrong results
    return 0;
}

1 个答案:

答案 0 :(得分:0)

你应该试试这个:

http://www.cplusplus.com/reference/cstdlib/itoa/

它可以正常使用签名的内容。

如果编译器抱怨它已弃用,请使用此函数: _itoa_s

小例子:

#include <stdio.h>
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
    char bin[33];
    _itoa_s(-5456,bin,2);
    printf("%s",bin);
    return 0;
}