黑马程序员技术交流社区
标题: 以二进制的形式打印一个整数 [打印本页]
作者: 小ㄟMò 时间: 2015-12-26 23:07
标题: 以二进制的形式打印一个整数
不废话,直接上代码:第一种方法:
-----------------
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型的指针函数,但结果不理想,必须得传一个数组进去,这不是我想要的,所以就不贴代码了。
作者: yolande 时间: 2015-12-27 22:49
不错不错! 取反+1 = -
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |