打印有符号整数的二进制表示形式

printing the binary representation of signed ints

本文关键字:表示 二进制 符号 整数 打印      更新时间:2023-10-16

>我需要一个函数来打印有符号整数的二进制表示,我有以下内容,它适用于负整数和正整数,它的工作原理是无符号值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;
}

你应该试试这个:

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;
}