使用按位运算从基数10转换为基数2

正如在标题中我试图将十进制数转换为二进制数。 我设置了最低的int作为我coudl

char * toBinary(int num) { int i = 1 <>= 1; printf("%d", i); getchar(); } } 

但它不起作用,每次换class后i仍然是负数,我改变了什么?

您的代码和您的代码描述都有几个错误。 这是一个更正版本:

 void print_binary(unsigned x) { for (unsigned bit = 1u << 31; bit != 0; bit >>= 1) putchar((x & bit) ? '1' : '0'); } 

错误:

  • 该函数不应返回char * ,因为它不返回任何内容。 如果你想创建一个返回字符串的函数,那就不同了。

  • 你无法计算1 << 31 ,因为那是溢出。 你必须使用无符号数: 1u << 31是可以的(假设int是32位)。

  • 您没有从十进制转换为二进制。 输入数字已经是二进制的,您只需将其打印成二进制。

使用未签名的i

 int i = 1 << 31; 

更正为:

 unsigned int i = 1u << 31; 

另外,代替使用31我想建议你编写与大小无关的代码(int的大小可以在不同的机器中不同)。

喜欢:

 unsigned int mask = 1u << ((sizeof(unsigned int) * CHAR_BIT) - 1); 

我已经命名了mask而不是i ,就像这段代码一样写。

 //conversion unsigned int mask = 1u << ((sizeof(unsigned int) * CHAR_BIT) - 1); while(mask > 0){ if((num & mask) == 0 ) printf("0"); else printf("1") mask = mask >> 1 ; // Right Shift } 

来自@ Carl Norum的评论:要正确编写一个大小平台独立代码,请使用在limits.h头文件中定义的CHAR_BIT宏。 注意CHAR_BITchar的位数,有可能在C的某些实现中,a字节可能等于8位。

阅读: 什么是CHAR_BIT