使用位运算实现 8 位 bit_array 的加减运算
本代码实现了三个函数:ba8_add、ba8_negate 和 ba8_sub。它们都是对 8 位的 bit_array 进行加减运算的。
ba8_add 函数实现了两个 8 位 bit_array 的加法。它使用了一个循环,从低位开始逐位相加,并逐位计算进位。具体来说,对于第 i 位,它先将 a 和 b 的第 i 位加起来,再加上上一位的进位,得到一个 sum 值。然后把 sum 的二进制表示中的最高位作为进位,最低位作为和,分别存入 res 中第 i 位和下一位。最后返回 res。这个算法实现了二进制加法的基本思想。
ba8_negate 函数实现了求 8 位 bit_array 的相反数。它先用 ba_not 函数对输入的 bit_array 取反,然后再加上 1。这个算法实现了二进制补码表示中求相反数的基本思想。
ba8_sub 函数实现了两个 8 位 bit_array 的减法。它先将 b 取反,并加上 1,得到 -b 的补码表示。然后将 a 和 -b 相加,得到 a-b。这个算法实现了二进制补码表示中的减法的基本思想。
总的来说,这个代码实现了基本的二进制加减法,但没有考虑溢出和负数的情况。在实际的计算机中,这些情况都需要特殊处理。
ba8_t ba8_add(ba8_t a, ba8_t b) {
ba8_t res;
int carry = 0;
for (int i = 0; i < 8; i++) {
int sum = get_bit_8(a, i) + get_bit_8(b, i) + carry;
carry = sum >> 1;
sum = sum & 1;
set_bit_8(res, i, sum);
}
return res;
}
ba8_t ba8_negate(ba8_t a) {
ba8_t ba_one = int_to_ba_8(1);
ba8_t ba_not_a = ba_not(a);
ba8_t res = ba8_add(ba_not_a, ba_one);
return res;
}
ba8_t ba8_sub(ba8_t a, ba8_t b) {
ba8_t ba_not_b = ba_not(b);
ba8_t ba_one = int_to_ba_8(1);
ba8_t ba_add_ba_not_b = ba8_add(ba_not_b, ba_one);
ba8_t res = ba8_add(a, ba_add_ba_not_b);
return res;
}
原文地址: https://www.cveoy.top/t/topic/nAEs 著作权归作者所有。请勿转载和采集!