Math 用数学方法将有符号整数转换为无符号整数

Math 用数学方法将有符号整数转换为无符号整数,math,integer,signed,unsigned-integer,Math,Integer,Signed,Unsigned Integer,我的OPC服务器需要一个无符号16位整数值,但只能发送一个有符号16位整数值。我需要从数学上把这个有符号整数改成无符号整数,但我不确定怎么做。我的互联网研究也没有引导我走上正确的道路。有人能给点建议吗?提前感谢。从数学上讲,从有符号到无符号的转换工作如下:(1)将有符号整数除以1+max,(2)将有符号整数编码为除法的非负余数。这里的max是您可以使用可用位数写入的最大整数,在您的情况下为16 回想一下,非负余数是唯一满足以下条件的整数r 1. s = q(1+max) + r 2. 0

我的OPC服务器需要一个无符号16位整数值,但只能发送一个有符号16位整数值。我需要从数学上把这个有符号整数改成无符号整数,但我不确定怎么做。我的互联网研究也没有引导我走上正确的道路。有人能给点建议吗?提前感谢。

从数学上讲,从有符号到无符号的转换工作如下:(1)将有符号整数除以
1+max
,(2)将有符号整数编码为除法的非负余数。这里的
max
是您可以使用可用位数写入的最大整数,在您的情况下为16

回想一下,非负余数是唯一满足以下条件的整数
r

  1. s = q(1+max) + r
  2. 0 <= r < 1+max.
因为值
r=1+max+s
满足上述非负面提醒的条件1和2

要使此约定按预期工作,签名的
s
必须满足

- (1 + max)/2 <= s < (1 + max)/2

你用什么编程语言来编写这段代码?第一句话有点不清楚:1)“发送剩余的”是什么意思?在数学文献中找不到这个词。2) “除以
1+max
”:它与“非负余数”或“有符号整数”有关吗?请澄清/重新表述。另外:3)在“此逻辑如下…”公式中,“非负余数”在哪里?@pmor感谢您的评论。请让我知道这是否更清楚。是的,谢谢你的修改。然而,文本变得有点长了。几个紧凑的例子(每个句子只有1个句子):1)C++ STD:}如果目标类型是无符号的,则所得的值是与源整数一致的最小无符号整数(模2n,其中n是用来表示未签名类型的位数)。2) C标准:«。。。如果新类型是无符号的,则通过反复增加或减去新类型中可以表示的最大值的一个值来转换该值,直到该值在新类型的范围内为止。3)书籍:C软件工程方法:«当整数值x转换为较小的无符号整数类型时,结果是x/(U_MAX+1)的非负余数,其中U_MAX是可以在较短的无符号类型中表示的最大数。4) DEC C语言参考手册:«当整数值降级为较小的无符号整数时,结果是数值的非负余数除以数字1,大于新整数类型的最大可表示无符号值»。
- (1 + max)/2 <= s < (1 + max)/2
 2 -> 2
 1 -> 1
 0 -> 0
-1 -> 0xFFFF
-2 -> 0xFFFE
-3 -> 0xFFFD
...
-15 -> 0xFFF1
...
-32768 -> 0x8000 = 32768 (!)
-32769 -> error: cannot codify using only 16 bits.