视频加载失败

课程

996 字
约 3 分钟

分组作业 01:字节位操作算法设计与实现

计算机科学导论exercises/group_assignments·更新于 2026-09-15

分组作业 01:字节位操作算法设计与实现

本报告记录了小组关于二进制字节特定位检测与修改算法的设计、推导与代码实现。


一、 课程作业基本信息

项目名称详细信息
课程名称计算机科学导论
小组名称败犬女组
组长姓名八奈见杏菜
小组成员Kisara,Kaguya
题目名称分组作业1:字节位操作算法
指导教师张瑾
提交日期2023年11月06日

二、 题目描述

  1. 问题 1:如何判断一个字节中第 ii 位为 1 还是 0
  2. 问题 2:如何将一个字节中第 ii 位设为 10
  3. 问题 3:如何将一个字节中的多个位设为 10

三、 解题思路

  • 问题 1 思路
    • 接收一个字节和需要判断的位位置 ii(从 07);
    • 使用按位与运算符 & 将字节与掩码 (1 << i) 进行按位与操作;
    • 若运算结果不为 0,则该位为 1,否则为 0
  • 问题 2 思路
    • 接收一个字节、位位置 ii 以及目标设置值 vtrue/false1/0);
    • 若目标值为 1,使用按位或赋值操作 byte |= (1 << i) 将第 ii 位置为 1
    • 若目标值为 0,使用按位与和按位取反结合操作 byte &= ~(1 << i) 将第 ii 位置为 0
  • 问题 3 思路
    • 接收一个字节、包含多个位位置的列表以及目标设置值;
    • 遍历所有待修改的位置,依次应用问题 2 中的按位掩码设置算法进行批量更新。

四、 源代码实现 (C++)

#include <iostream>
#include <bitset>
using namespace std;

// 问题 1:判断第 i 位是否为 1
bool getBit(unsigned char byte, int position) {
    return ((byte & (1 << position)) != 0);
}

// 问题 2:设置第 position 位为 1 或 0
void setBit(unsigned char &byte, int position, bool value) {
    if (value) {
        byte |= (1 << position);   // 将第 position 位置 1
    } else {
        byte &= ~(1 << position);  // 将第 position 位置 0
    }
}

// 问题 3:将多个指定位设置为相同值
void setMultipleBits(unsigned char &byte, const int positions[], int count, bool value) {
    for (int i = 0; i < count; i++) {
        setBit(byte, positions[i], value);
    }
}

int main() {
    unsigned char byte = 0b10001111; // 初始二进制字节 (143)
    cout << "初始字节二进制表示: " << bitset<8>(byte) << endl;

    // 测试问题 1
    int testPos = 3;
    cout << "第 " << testPos << " 位是否为 1: " << (getBit(byte, testPos) ? "是" : "否") << endl;

    // 测试问题 2
    setBit(byte, 3, true);
    cout << "修改第 3 位为 1 后: " << bitset<8>(byte) << endl;

    // 测试问题 3
    int multiPositions[] = {0, 1, 2};
    setMultipleBits(byte, multiPositions, 3, false);
    cout << "将第 0,1,2 位批量置 0 后: " << bitset<8>(byte) << endl;

    return 0;
}

五、 成员分工

  • Kisara:负责算法逻辑设计、C++ 核心代码编写与程序测试。
  • Kaguya:负责流程图绘制、掩码数学逻辑校验。
  • 八奈见杏菜:负责文档排版与代码注释整理。
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录