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

  实现思想:

        二进制数是以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 。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 在 C 语言中,可以使用位运算符来输出一个十进制二进制原码。 例如,下面的代码使用了位运算符 `&` 和左移运算符 `<<` 来输出十进制 `n` 的二进制原码: ```c void printBinary(unsigned int n) { unsigned int i; for (i = 1 << 31; i > 0; i = i / 2) (n & i)? printf("1"): printf("0"); } ``` 这个例子使用的是unsigned int 类型的整,如果是signed int 类型的整,需要特别处理负。 然而, C++有一个库函 <bitset> 可以很方便的将整转化为二进制. ```c++ #include<bitset> using namespace std; int main(){ int n = 10; bitset<32> binary(n); cout<<binary; return 0; } ``` 输出:00000000000000000000000000001010 ### 回答2: 要输出一个十进制二进制原码,可以使用C语言中的位运算操作来实现。 首先,我们需要定义一个整型变量来存储输入的十进制。然后,使用一个循环来逐位获取该十进制二进制表示。 在循环中,可以使用位运算操作符 ">>" 和 "&" 来进行位操作。具体步骤如下: 1. 定义一个整型变量num来存储输入的十进制。 2. 使用一个循环,循环条件为num不等于0。 3. 在循环中,先使用 "num & 1" 的操作来获取num的最低位的值。 4. 接着,使用printf函输出该最低位的值。 5. 使用 "num >> 1" 的操作来将num的所有位向右移一位,相当于将最低位丢弃。 6. 循环结束后,输出的结果为num的二进制原码。 以下是用C语言编写的代码示例: #include <stdio.h> void decimalToBinary(int num) { if (num == 0) { printf("0"); return; } int i, binary[32]; for (i = 0; num > 0; i++) { binary[i] = num % 2; num = num / 2; } for (i = i - 1; i >= 0; i--) { printf("%d", binary[i]); } } int main() { int num; printf("请输入一个十进制:"); scanf("%d", &num); printf("二进制原码为:"); decimalToBinary(num); return 0; } 以上代码首先定义了一个decimalToBinary用于将十进制转换为二进制,然后在main函中读取用户输入的十进制,并调用decimalToBinary函输出二进制原码。 注意:如果输入的十进制为0,则直接输出0。 ### 回答3: 要输出一个十进制二进制原码,我们可以使用C语言中的位运算和循环结构来实现。 首先,我们需要将要转换的十进制赋值给一个变量,假设为decimalNum。 接下来,我们可以使用一个循环结构,循环32次(C语言中一个整型占用32位),从最高位到最低位,依次计算每个二进制位的值。 循环中的每次迭代,我们可以将decimalNum与1进行位与运算(&),这样可以取得decimalNum的最低位的值(0或1),并将其输出。 然后,我们可以使用右移运算符(>>)将decimalNum向右移动一位,这样下次迭代时,就可以获取下一位的二进制值。 代码示例如下: ```c #include <stdio.h> void decimalToBinary(int decimalNum) { for (int i = 31; i >= 0; i--) { int bit = (decimalNum >> i) & 1; printf("%d", bit); } } int main() { int decimalNum; printf("请输入一个十进制:"); scanf("%d", &decimalNum); printf("二进制原码为:"); decimalToBinary(decimalNum); printf("\n"); return 0; } ``` 运行程序,输入一个十进制,即可输出对应的二进制原码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枸杞桑葚菊花茶

创作不易,鼓励==>动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值