问题标签 [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.

0 投票
5 回答
2860 浏览

c - 如何以十六进制表示负 char 值?

以下代码

给编译器警告“由于数据类型的范围有限,比较总是错误的”。当我将检查更改为

这感觉非常违反直觉。char根据十六进制的特定字节值检查 a 的正确方法是什么?(除了使其未签名)

0 投票
6 回答
1357 浏览

c - 整数的符号何时真正重要?

由于 C 中定义转换和操作的方式,使用有符号变量还是无符号变量似乎无关紧要:

那么,是否有一套规则来说明在哪些条件下变量的符号性真的会产生影响?

0 投票
1 回答
697 浏览

integer - 如何将四个字节的 Java 整数发送到另一个应用程序?

我尝试了不同的方法(从注释代码中可以看出)将模式转换为四个字节,以通过套接字将其发送到另一个应用程序。它适用于高达 127 的整数,然后再适用于超过 256 的整数。我相信它与被签名的 Java 类型有关,但似乎并没有让它工作。以下是程序打印的一些示例。

一个字节怎么可能突然存储 32 位?我该如何解决这个问题?

0 投票
1 回答
25702 浏览

c - How do I #define an unsigned char* string?

I have following define in my code

and I want to send it with a function com_reply(unsigned char* msg, uint16_t lenght).

Now I get a warning that my argument differs in signedness. I know what the problem is and also why com_reply uses unsigned char* instead of char*, I just want to know:

How can I define my string as an unsigned char* so I can use it throughout my program without getting warnings all over the place.

EDIT:

Strictly speaking I have more than one defines here and the main reason is that there is a BANNER define which consists of several other defines, like this:

Should I create const variables and concatenate them at program start instead of using defines here?

0 投票
1 回答
309 浏览

c++ - 每次我知道我正在处理无符号值时,我应该使用“无符号”吗?

通常已知值是积极的。例如 TCP/UDP 序列号总是正值。两者intunsigned int足够大,甚至可以存储最大的sequence number,所以我可以使用这些类型中的任何一种。当已知值为正时,还有许多其他示例。

unsigned当常规类型的容量signed足够(而且通常绰绰有余)时,是否有任何理由使用类型?

我个人倾向于使用常规类型,因为:

  • int可能比uintor更具可读性unsigned int
  • 我不需要包含额外的标题UINT等。
  • 我将避免在程序中的某个地方进行额外的演员表

unsigned我可以想象使用类型的原因:

  • 帮助编译器生成更好的代码?
  • 帮助其他程序员了解该变量是无符号的
  • 避免可能的错误(例如,当将 int 分配给 UINT 编译器时可能会产生编译时错误,我们应该检查我们分配的值是否为负)
0 投票
2 回答
1177 浏览

cpu-registers - 6502 使用有符号或无符号 8 位寄存器 (JAVA) 吗?

我正在为 6502 编写一个模拟器,基本上,有一些指令在其中一个寄存器(主要是 X 和 Y)中保存了一个偏移量,我想知道,因为分支指令使用有符号 8 位整数,所以寄存器将其值保持为 8 位有符号?这意味着:

假设在这种情况下 x = 0xEE。在常规二进制中,这意味着 x = 238。然而,在 6502 中,分支指令使用带符号的偏移量来跳转到内存地址,所以我想知道,在这种情况下,238 是解释为 -18,还是只是常规无符号 8 位值?

0 投票
5 回答
32231 浏览

c - 类型转换 - 无符号到有符号 int/char

我尝试执行以下程序:

对于这个程序,我得到了输出:

字符是不同的!!!int 是一样的!!!

为什么我们得到不同的输出?
输出应该如下?

字符是一样的!!!int 是一样的!!!

键盘链接。

0 投票
1 回答
541 浏览

c# - 为什么 System.Net.IPAddress 使用有符号类型?

两种方法IPAddress(Int64)都使用签名类型Int32 HostToNetworkOrder(Int32)System.Net.IPAddressIP 地址。

这使得有必要在将结果HostToNetworkOrder用作构造函数的参数时将结果强制转换IPAddress,从而产生如下代码:

如果 network-order 值不是无符号的,则 192.168.0.255 等地址将引发 ArgumentOutOfRangeException。这可能是由于IPAddress(Int64)不接受大于 0x00000000FFFFFFFF 的值但从 Int32 转换时 (net-order)192.168.0.255 的 Int64 表示为 0xffffffffff00a8c0 引起的吗?

即使 IP 地址没有任何签名概念,使用签名类型有什么意义吗?似乎只使用无符号类型会简单得多。

选择签名类型有什么具体原因吗?

0 投票
4 回答
645 浏览

c - C cast 和 char 签名

所以最近,我读到了一个关于 C 中三种不同类型 char/unsigned char/signed char 的问题。我现在遇到的问题不是我到目前为止遇到的问题(我的程序在所有经过测试的计算机上都能正常工作,并且只针对 little-endian(基本上所有使用 Windows/Linux 的现代台式机和服务器对吗?)。我经常重用一个 char我为保存一个“字符串”(当然不是真正的字符串)作为临时变量而定义的数组。例如,我没有将另一个字符添加到堆栈中,而是重用了数组 [0] 之类的成员之一。但是,我基于此策略事实上, char 总是会被签名, 直到我今天读到它实际上取决于实现. 如果我现在有一个 char 并且我给它分配一个负值会发生什么?

如果我写

我认为 C 风格的转换只会重新解释位,并且 A 表示为无符号类型的值会变得不同。我对这些 C 风格的演员表只是对位的重新解释是对的吗?我现在指的是有符号 <-> 无符号转换。

因此,如果实现的 char 为无符号,我的程序会按预期停止工作吗?取最后一个变量,如果我现在这样做

我现在将一个无符号字符与一个有符号字符值进行比较,所以这会简单地比较不关心符号的位还是会返回 false,因为显然 A 不能为 -1?我很困惑在这种情况下会发生什么。这也是我最关心的问题,因为我经常使用这样的字符。

0 投票
5 回答
326 浏览

c++ - 关于 char 的签名问题

根据标准,是否char签名是实现定义的。这给我带来了一些麻烦。以下是一些示例:

1) 测试最高有效位。如果char已签名,我可以简单地将值与0. 如果无符号,我将值与之进行比较128。这两种简单的方法都不是通用的,并且适用于这两种情况。为了编写可移植的代码,我似乎必须直接操作这些位,这并不整洁。

2) 赋值。有时,我需要将位模式写入一个char值。如果char是无符号的,这可以使用十六进制表示法轻松完成,例如char c = 0xff. char但是这种方法在签名时不适用。举个char c = 0xff例子。超出了有符号可以保持0xff的最大值。char在这种情况下,标准表示 的结果值c是实现定义的。

那么,有人对这两个问题有好的想法吗?关于第二个,我想知道char c = '\xff'signed 和 unsigned 是否都可以char

注意:有时需要将显式位模式写入字符。请参阅http://en.cppreference.com/w/cpp/string/multibyte/mbsrtowcs中的示例。