如何输出一个数的二进制数

  实现思想:

        二进制数是以bit为操作数,所以要想将一个数转换为二进制数,我们需要先要将输入的数字转化为二进制数,然后从高位到低位判断每一位是 1 还是 0,最后把对应的 1 和 0 打印出来。

         其中所要运用到位运算的相关知识。

位运算:

        位运算是针对二进制而言的,位指的是bit位,但凡涉及位运算,

        不管几进制的数据计算机中都会转换成二进制参与运算。

        一般情况下涉及位运算使用的都是 无符号

        如果是有符号数 可能需要考虑 原码、反码、补码转换的问题

        位运算一般多用于硬件设备的控制或者标志位的控制。

                        &         按位与 按位运算 全1为1 有0为0

                        |         按位或 按位运算 有1为1 全0为0

                        ^         按位异或 按位运算 不同为1 相同为0

                        ~         按位取反 按位运算 0变1 1变0

                        >>         按位右移 整个数据向右移动 高位补0 舍弃低位

                        <<         按位左移 整个数据向左移动 低位补0 舍弃高位

例如:

#include <stdio.h>

int main(int argc, const char *argv[])
{
    unsigned char a = 0xa5;
    unsigned char b = 0x97;
    unsigned char c = 0;

//按位与
    c = a & b;
    //a: 10100101
    //b: 10010111
    // &
    //c: 10000101 -->0x85
    printf("a & b = %#x\n", c);//0x85

 //按位或
    c = a | b;
    //a: 10100101
    //b: 10010111
    // |
    //c: 10110111 -->0xB7
    printf("a | b = %#x\n", c);//0xB7

    //按位异或
    c = a ^ b;
    //a: 10100101
    //b: 10010111
    // ^
    //c: 00110010 -->0x32
    printf("a ^ b = %#x\n", c);//0x32

//按位取反
    c = ~a;
    //a: 10100101
    // ~
    //c: 01011010 -->0x5A
    printf("~a = %#x\n", c);//0x5A

//按位左移
    c = a<<2;
    //a: 10100101
    // <<2
    //c: 10010100 -->0x94
    printf("a<<2 = %#x\n", c);//0x94

//按位右移
    c = a>>2;
    //a: 10100101
    // >>2
    //c: 00101001 -->0x29
    printf("a>>2 = %#x\n", c);//0x29

    return 0;
}

程序代码:

#include <stdio.h>

void binary(int number);    //声明binary函数

int main(int argc, const char *argv[])
{
	int number = 0;
	scanf("%d",&number);
	binary(number);
	return 0;
}
void binary(int number){
	unsigned turn = 1u<<31;
	//1u表示这是一个unsigned的1
	//通过<<31得到最高位为1的数字,0x1000...

	int out = number & turn?1:0;
	for(; turn ; turn >>=1){
		//通过以turn的长度为次数,将turn向右逐一移位
	    out = number & turn?1:0;
		//通过&运算判断number的每一位是否为1
		printf("%d",out);	
		//如果为number的某一位为1,则在该位置输出一个1,反之输出一个0
	}
	printf("\n");
}

运行结果:

 注意:

        函数中定义的参数为turn参数为无符号的int类型,大小为32bit,所以输出的二进制数的范围是0 ~ 2^32-1。最小输出32个 0 最大输出32个 1 。

猜你喜欢

转载自blog.csdn.net/Little_Star0/article/details/127453138