#include stdinth#include bit_oph 通过在bit_array上进行位运算从而实现加法 该函数输入两个8位的bit_array 返回一个8位的bit_array 提示: - 你可以使用get_bit_8ba idx从给定bit_array中取出第idx位 - 你可以使用set_bit_8ba idx bit将ba中第idx位配置为bit值 注意: bi
#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++) {
uint8_t bit_a = get_bit_8(a, i);
uint8_t bit_b = get_bit_8(b, i);
uint8_t sum = bit_a ^ bit_b ^ carry; // 异或运算得到当前位的和
carry = (bit_a & bit_b) | (bit_a & carry) | (bit_b & carry); // 进位规则
set_bit_8(res, i, sum); // 将和设置到结果中
}
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); // 按位取反
res = ba8_add(res, int_to_ba_8(1)); // 加1
return res;
}
// 请使用按位取反(ba_not)和加法(ba_add)实现两个数的减法
// 提示: 你可以使用int_to_ba_8函数获得常数1的bit_array表示
ba8_t ba8_sub(ba8_t a, ba8_t b) {
ba8_t neg_b = ba8_negate(b); // 求-b的补码
ba8_t res = ba8_add(a, neg_b); // a + (-b)
return res;
原文地址: https://www.cveoy.top/t/topic/cR4v 著作权归作者所有。请勿转载和采集!