【问题标题】:Doing 64bit addition with 2 high 32bit integers and 2 low 32bit integers. Are there more efficient ways of getting the carry bit?用 2 个高 32 位整数和 2 个低 32 位整数进行 64 位加法。有没有更有效的方法来获取进位位?
【发布时间】:2023-03-19 20:04:02
【问题描述】:

假设 A 和 B 是我的低 32 位整数,而 T 是一个 32 位整数,我想表示 A 和 B 相加的进位。我拼凑了一些快速逻辑来得到 T:

T = (A >> 1) + (B >> 1);
T += A & B & 1;
T >>= 31;

它有效,但我不喜欢执行此操作所需的操作数量(3 次右移、2 次加法、2 次加法)。我真的很感谢一些有趣的专家就如何使这个更清洁/更高效的意见。谢谢!

对于我目前的问题,我只能在 HLSL 中做些什么。我不介意 SM4 和 SM5 特定的解决方案,但我也愿意接受一般情况下可行的解决方案。

【问题讨论】:

    标签: bit-manipulation hlsl carryflag


    【解决方案1】:

    这里的技术会起作用吗:Efficient 128-bit addition using carry flag

    S = A + B;
    T = (S < A);
    

    我假设比较结果是 1 或 0,就像在 C 中一样。如果不是,请在语句末尾添加 ?1:0

    【讨论】:

    • 我真的很喜欢这个想法,但在我的情况下它似乎不起作用。很高兴知道除了我上面的烂摊子之外还有其他想法。
    • 我不了解 HLSL,但如果它是图灵完备的语言,那么显然它会支持 T = (S &lt; A) ? 1 : 0if (S &lt; A) T = 1; else T = 0; 之类的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多