#include <stdint.h>

#include 'bit_op.h'

/// 通过在bit_array上进行位运算从而实现加法 /// 该函数输入两个8位的bit_array, 返回一个8位的bit_array /// /// 提示: /// - 你可以使用get_bit_8(ba, idx)从给定bit_array中取出第idx位 /// - 你可以使用set_bit_8(ba, idx, bit)ba中第idx位配置为bit值 // 注意: bit_array中第i位是指从低到高第i有效位 ba8_t ba8_add(ba8_t a, ba8_t b) { ba8_t res = init_ba8(0); // 初始化结果为0

uint8_t carry = 0; // 进位标志

for (int i = 0; i < 8; i++) {
    // 按位计算a和b的和以及进位
    uint8_t sum = get_bit_8(a, i) ^ get_bit_8(b, i) ^ carry;

    // 将结果写入res
    set_bit_8(&res, i, sum);

    // 更新进位标志
    carry = (get_bit_8(a, i) & get_bit_8(b, i)) | (get_bit_8(a, i) & carry) | (get_bit_8(b, i) & carry);
}

return res;

}

// 请使用按位取反(ba_not)和加法(ba_add)实现求一个数的相反数 // 即,给定一个8位补码表示的数字x,求 -x 的8位补码表示 // 提示: 你可以使用int_to_ba_8函数获得常数1的bit_array表示 // ba8_t ba8_negate(ba8_t a) { ba8_t res = ba_not(a); // 对a按位取反

// 将结果加1
res = ba8_add(res, int_to_ba_8(1));

return res;

}

// 请使用按位取反(ba_not)和加法(ba_add)实现两个数的减法 // 提示: 你可以使用int_to_ba_8函数获得常数1的bit_array表示 ba8_t ba8_sub(ba8_t a, ba8_t b) { // 求b的相反数 ba8_t neg_b = ba8_negate(b);

// 计算a和-b的和
ba8_t res = ba8_add(a, neg_b);

return res;

}

8位bit_array的加减法和取反实现

原文地址: https://www.cveoy.top/t/topic/nBk7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录