需要减去两个无符号整数(x 和 y)。x 总是大于 y。但是,x 和 y 都可以环绕;例如,如果它们都是字节,则在 0xff 之后是 0x00。问题情况是如果 x 环绕,而 y 没有。现在 x 似乎小于 y。幸运的是,x 不会绕回两次(只能保证一次)。假设字节,x 已经包裹,现在是 0x2,而 y 没有包裹,现在是 0xFE。x - y 的正确答案应该是 0x4。
也许,
( x > y) ? (x-y) : (x+0xff-y);
但我认为还有另一种方式,涉及 2s 恭维?,在这个嵌入式系统中,x 和 y 是最大的 unsigned int 类型,所以添加 0xff... 是不可能的
编写语句的最佳方式是什么(目标语言是 C)?