gpt4 book ai didi

c - 无符号整数运算中低于零

转载 作者:行者123 更新时间:2023-11-30 20:15:44 26 4
gpt4 key购买 nike

我想从另一个 16 位无符号整数列表中推导出一个 16 位无符号整数列表。

例如,给定列表:

10000, 12349, 32333, 3342

我知道另一个列表的第一个整数是 0,现在我想推导出其余的。映射是从它们中减去10000,我得到

0, 2349, 22333, 58878

其中 58878 = (3342-10000+65536) 模 65536 作为包装结果。

伪代码是这样的:

 void deduce(u_int16_t list1[100], u_int16_t *list2[100], u_int16_t first)
{
int diff = first - list1[0];
for (i = 0; i < 100; i++)
(*list2)[i] = (list1[i] + diff + 65536) % 65536;
}

但是我们知道无符号整数中没有负数。

那么如何进行映射(或推导)呢?

谢谢!

最佳答案

无符号整数变量可以减去比它们包含的更多的内容 - 如果我正确理解这个问题的话。

u_int16_t u = 10;
u -= 20; // => u = u - 20;
printf("%x, %u\n", u, u); // => fff6, 65526

区别是

  • 显示时,u 不显示负值 - 即 MSb(最高有效位,即位 15)被解释为(此处)215,接下来是 214 等等...
  • 扩展(例如扩展至 32 位)时,MBb 不会从位 16 传播到位 31(如果有符号,则会如此) - 它们是 0
  • 右移时,MSb 值始终为 0(如果有符号,则与之前的 MSb 相同,例如负值 1 )

因此,您的映射将继续使用 u_int16_t (如果您在任何地方都使用该类型,则不需要 % 模 65536,因为无论如何值都是 16位 - 模数是隐式的)。

关于c - 无符号整数运算中低于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17026053/

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