gpt4 book ai didi

c - 得到 unsigned long long 加法进位

转载 作者:太空狗 更新时间:2023-10-29 16:40:47 25 4
gpt4 key购买 nike

我想在c中获取两个无符号64位整数相加的进位位。如果需要,我可以使用 x86-64 asm。代码:

#include <stdio.h>

typedef unsigned long long llu;

int main(void){
llu a = -1, b = -1;
int carry = /*carry of a+b*/;
llu res = a+b;
printf("a+b = %llu (because addition overflowed), carry bit = %d\n", res, carry);
return 0;
}

最佳答案

作为@EugeneSh。观察到,进位要么是 0 要么是 1。此外,鉴于 ab 都具有相同的 unsigned 类型,它们的和是明确定义的即使算术结果超出了它们类型的范围。此外,当发生溢出时,求和的 (C) 结果将小于 ab ,否则会更大,因此我们可以利用 C 关系运算的事实评估为 0 或 1 以将进位表示为

carry = (a + b) < a;

这不需要任何 header ,也不依赖于特定的上限,甚至不依赖于 ab 具有相同的类型。只要两者都具有无符号类型,它就会正确报告总和是否溢出了它们类型或unsigned int(以较宽者为准),这与它们的总和设置进位位相同。作为奖励,它以总和本身的形式表示,我认为这清楚地表明了正在测试的内容。

关于c - 得到 unsigned long long 加法进位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56027411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com