不废话,直接上代码:第一种方法:
-----------------
void binaryPrint(int num) {
// 定义binary = 0b 1000 0000 0000 0000 0000 0000 0000 0000 unsigned int binary = 0x80000000;
// out用来暂存并输出每一位的结果 int out = 0;
//考虑num为负数的情况 if (num<0) { num = ~num+1; printf("-"); }
/** * 用binary与num按位与,得到num最高位(32位)的值,然后右移31位到最低位,最后以十进制打印出来; binary右移一位,再次与num按位与得到第31位的值,然后右移30位到最低位,最后以十进制打印出来; 同理,以此类推…… */ for (int i = 0; i<32; i++, binary>>=1) {
out = (num&binary)>>(31-i); //实现算法
printf("%d",out);
//按四位分开,便于观察 if (0 == (i+1)%4) { printf(" "); } } printf("\n"); }
第二种方法: ------------------ void binaryPrint(int num) {
int out;
//考虑num为负数的情况 if (num<0) { num = ~num+1; printf("-"); }
for(int i = 0; i<32; i++) {
out = num>>(31-i)&1; //实现算法
printf("%d",out);
if (0 == (i+1)%4) { printf(" "); } } printf("\n");
}
两种方法类似,原理都是利用“按位与”来实现的。第一种方法是我首先想到的,第二种方法是得到了朋友的提示,然后写出来的。
代码已贴上,欢迎指正,各位大神若是有什么更好的方法一起分享哈…………
后面想改成带返回值的函数,直接返回输出的二进制的位数。我试了用int型的指针函数,但结果不理想,必须得传一个数组进去,这不是我想要的,所以就不贴代码了。
|