C++ 蓝桥杯基础 01字串

程序展示了如何用C++通过位运算实现32种5位01串的生成,按照从小到大顺序输出。涉及的关键词包括位运算符、整数转换和输出格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此程序使用两个嵌套循环,外部循环遍历32种可能的整数,内部循环遍历每个整数的二进制表示的每一位,并输出。这样可以按照从小到大的顺序输出32种01串。

/*
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

00000

00001

00010

00011

00100

请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
*/


#include <iostream>
using namespace std;
 
int main(void) 
{
    // 遍历32种可能的01串
    for (int i = 0; i < 32; i++)
	 {
        // 将整数转换为对应的二进制表示
        for (int j = 4; j >= 0; j--) 
		{
            // 通过位运算获取每一位的值
            int bit = (i >> j) & 1;
            cout << bit;
        }
        cout << endl;
    }

    return 0;
}

      位运算符
 C ++语言继承了 C 语言能进行位运算的优点,提供了6个位运算符,分别为"~"(按位求反)、"&"(按位与)、""(按位或)、""(按位异或)、">>"(右移位)、"<<"(左移位)。其中,"~"是单目运算符,其余都是双目运算符。
位运算符可以对操作数按二进制形式逐位进行运算,参与运算的操作数都应为整数,不能是实型数。
(1)"~"运算符的作用是对一个二进制数的每一位求反,即0→1,1→0。
(2)"&"运算符的作用是对两个操作数对应的每一位分别进行逻辑与操作。两个操作数对应位都是1,则该位运算结果为1,否则该位运算结果为0。
(3)"1"运算符的作用是对两个操作数对应的每一位分别进行逻辑或操作。两个操作数对应位中有1位是1,则该位运算结果为1,否则该位运算结果为0。
(4)""作用是对两个操作数对应的每一位分别进行逻辑异或操作。两个操作数对应位的值不同,则该位运算结果为1,否则该位运算结果为0。
(5)">>"运算符的作用是将左操作数的各二进制位右移,溢出的低位舍弃,对无符号数和有符号数中的正数,高位补0;对有符号数中的负数,有些系统补0,有些系统补1,右移位数由右操作数给出。右移1位相当于将操作数除以2。例如,表达式4>>1的结果为2。
(6)"<<"运算符的作用是将左操作数的各二进制位左移,低位补0,高位溢出部分舍弃,左移位数由右操作数给出。左移1位相当于将操作数乘以2。例如,表达式4<<1的结果为8。

int bit = (i >> j) & 1;

这行代码主要用于提取整数 i 的二进制表示中的每一位,并将提取的位值存储在变量 bit 中。让我们通过一个例子来说明:

假设 i 的值为 10(二进制表示为 1010),我们将遍历该整数的二进制表示的每一位:

  1. j = 4: (10 >> 4) & 1,右移4位后得到 0,0 & 1 结果为 0,所以 bit = 0
  2. j = 3: (10 >> 3) & 1,右移3位后得到 1,1 & 1 结果为 1,所以 bit = 1
  3. j = 2: (10 >> 2) & 1,右移2位后得到 10(二进制),10 & 1 结果为 0,所以 bit = 0
  4. j = 1: (10 >> 1) & 1,右移1位后得到 101(二进制),101 & 1 结果为 1,所以 bit = 1
  5. j = 0: (10 >> 0) & 1,右移0位后得到 1010(二进制),1010 & 1 结果为 0,所以 bit = 0

因此,对于整数 i = 10,这个循环将输出二进制表示 1010 的每一位。在这个特定的例子中,bit 将依次取值 0, 1, 0, 1,这就是我们从右向左提取的每一位的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值