问题标签 [signedness]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 有人可以解释 char 的签名是如何特定于平台的吗?
我最近读到了
和
是平台特定的。
我无法完全理解这个?这是否意味着位序列可以从一个平台到下一个平台不同,即平台1 的符号是第一位,平台2 的符号可能在末尾?您将如何对此进行编码?
基本上我的问题来自于看到这条线:
我不明白标牌的相关性?
c++ - 字符签名最严重的副作用。(解释符号对字符和演员表的影响)
在 C++ 中处理字节时,我经常使用使用 char 的库。另一种方法是将“字节”定义为无符号字符,但这不是他们决定使用的标准。我经常将字节从 C# 传递到 C++ dll 并将它们转换为 char 以使用该库。
当将 int 转换为 chars 或将 chars 转换为其他简单类型时,可能会出现哪些副作用。具体来说,您何时处理过这个损坏的代码,您是如何发现它是因为 char 签名的?
幸运的是我没有在我的代码中遇到这个,在学校的嵌入式系统课上使用了一个 char 签名的转换技巧。我希望更好地理解这个问题,因为我觉得它与我正在做的工作相关。
c# - 使用 miscutil 的 C# 和 java 大端字节之间的区别
我正在使用miscutil库使用套接字在 Java 和 C# 应用程序之间进行通信。我试图找出以下代码之间的区别(这是 Groovy,但 Java 结果是相同的):
和 C#:
如您所见,最后一个字节-120
在 Java 版本和136
C# 中。
c - 使用 strncat 进行字符串连接会导致符号错误
更新:char、signed char 还是 unsigned 的问题最终在这里没有意义。在这种情况下使用 memcpy 更合适,因为它不分青红皂白地作用于字节。
不可能是一个更简单的操作,但我似乎错过了一个关键步骤。在下面的代码中,我试图填充bufferdata
编译buffer
器警告我签名差异的内容。
language-agnostic - 对于任何有限浮点值,是否保证 x - x == 0?
浮点值是不精确的,这就是为什么我们应该在比较中很少使用严格的数值相等。例如,在 Java 中会打印false
(如在 ideone.com 上看到的):
通常比较浮点计算结果的正确方法是查看与某个期望值的绝对差是否小于某个可容忍的epsilon。
问题是某些操作是否可以产生准确的结果。我们知道,对于任何非有限浮点值x
(即要么NaN
或无穷大),x - x
总是ALWAYS NaN
。
但如果x
是有限的,这是否有任何保证?
x * -1 == -x
x - x == 0
(特别是我对 Java 行为最感兴趣,但也欢迎讨论其他语言。)
对于它的价值,我认为(我可能在这里错了)答案是肯定的!我认为这归结为对于任何有限的 IEEE-754浮点值,它的加法逆是否总是可以精确计算。由于 egfloat
和double
有一个专门用于符号的位,因此似乎就是这种情况,因为它只需要翻转符号位即可找到加法逆元(即有效数字应保持不变)。
相关问题
assembly - Z80 汇编器/机器代码中的字节/字/地址是有符号还是无符号?
我正在为 Z80 二进制文件制作一个模拟器,但我无法从手册或谷歌中找出所有整数数据类型是有符号还是无符号。那么来自 register A
,B
...HL
等的数字是否已BC
签名?
此外,在机器代码中,指令后面的字节/字/地址是带符号的还是无符号的参数?
就像在这些示例中一样(来自8080/Z80 指令集):
提前致谢。
c++ - 浮点数的符号
有没有一种简单的方法来确定浮点数的符号?
我进行了实验并想出了这个:
其中 (c[3] & 0x10000000) 为负数给出 > 0 的值,但我认为这需要我做出以下假设:
- 机器的字节是 8 位大
- 浮点数是 4 个字节大?
- 机器的最高位是最左边的位(字节序?)
如果这些假设中的任何一个是错误的或者我错过了任何假设,请纠正我。
ruby - 在 Ruby 中解压缩签名的 little-endian
所以我正在研究一些 MongoDB 协议的东西。所有整数都是有符号的小端序。使用 Ruby 的标准Array#pack
方法,我可以将整数转换为我想要的二进制字符串:
然而,另一方面,该String#unpack
方法具有记录为专门返回无符号整数的“V”格式:
没有用于签名 little-endian 字节顺序的格式化程序。我确信我可以玩位移游戏,或者编写我自己的不使用数组打包的字节处理方法,但我想知道是否有其他人遇到过这个问题并找到了一个简单的解决方案。非常感谢。
c - 例如,在 C 中,为什么允许对 shift 的第二个操作数进行签名?
注意:这个问题是关于位移运算符 << 和 >>的第二个操作数的符号性。完全不是关于第一个操作数。
CERT INT34-C,部分:不要移动负数的位......
并不是说它需要证明,而是他们证明说这是未定义的行为是正当的。
我会认为该规则是有意义的,因为如果您想以另一种方式移动,请使用适当的移位运算符为另一个方向移动正数位。
因此,如果在 C 语言中,移位负数位既没有必要也没有定义,为什么 << 或 >> 的第二个操作数甚至允许有符号?
例如,MISRA-C:2004(无论您认为 MISRA 喜欢还是不喜欢)在其第 6.10.2 节中,作为解释结果类型仅取决于第一个操作数的副作用,说“第二个操作数可以是任何有符号或无符号整数类型”。[强调我的]
为什么要邀请人们在位移中使用有符号的第二个操作数?为什么允许?有没有编译器警告过它?