我需要一个函数来打印带有符号的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;
}
答案 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;
}