问题标签 [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 值?
以下代码
给编译器警告“由于数据类型的范围有限,比较总是错误的”。当我将检查更改为
这感觉非常违反直觉。char
根据十六进制的特定字节值检查 a 的正确方法是什么?(除了使其未签名)
c - 整数的符号何时真正重要?
由于 C 中定义转换和操作的方式,使用有符号变量还是无符号变量似乎无关紧要:
那么,是否有一套规则来说明在哪些条件下变量的符号性真的会产生影响?
integer - 如何将四个字节的 Java 整数发送到另一个应用程序?
我尝试了不同的方法(从注释代码中可以看出)将模式转换为四个字节,以通过套接字将其发送到另一个应用程序。它适用于高达 127 的整数,然后再适用于超过 256 的整数。我相信它与被签名的 Java 类型有关,但似乎并没有让它工作。以下是程序打印的一些示例。
一个字节怎么可能突然存储 32 位?我该如何解决这个问题?
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?
c++ - 每次我知道我正在处理无符号值时,我应该使用“无符号”吗?
通常已知值是积极的。例如 TCP/UDP 序列号总是正值。两者int
都unsigned int
足够大,甚至可以存储最大的sequence number
,所以我可以使用这些类型中的任何一种。当已知值为正时,还有许多其他示例。
unsigned
当常规类型的容量signed
足够(而且通常绰绰有余)时,是否有任何理由使用类型?
我个人倾向于使用常规类型,因为:
int
可能比uint
or更具可读性unsigned int
- 我不需要包含额外的标题
UINT
等。 - 我将避免在程序中的某个地方进行额外的演员表
unsigned
我可以想象使用类型的原因:
- 帮助编译器生成更好的代码?
- 帮助其他程序员了解该变量是无符号的
- 避免可能的错误(例如,当将 int 分配给 UINT 编译器时可能会产生编译时错误,我们应该检查我们分配的值是否为负)
cpu-registers - 6502 使用有符号或无符号 8 位寄存器 (JAVA) 吗?
我正在为 6502 编写一个模拟器,基本上,有一些指令在其中一个寄存器(主要是 X 和 Y)中保存了一个偏移量,我想知道,因为分支指令使用有符号 8 位整数,所以寄存器将其值保持为 8 位有符号?这意味着:
假设在这种情况下 x = 0xEE。在常规二进制中,这意味着 x = 238。然而,在 6502 中,分支指令使用带符号的偏移量来跳转到内存地址,所以我想知道,在这种情况下,238 是解释为 -18,还是只是常规无符号 8 位值?
c# - 为什么 System.Net.IPAddress 使用有符号类型?
两种方法IPAddress(Int64)
都使用签名类型Int32 HostToNetworkOrder(Int32)
的System.Net.IPAddress
IP 地址。
这使得有必要在将结果HostToNetworkOrder
用作构造函数的参数时将结果强制转换IPAddress
,从而产生如下代码:
如果 network-order 值不是无符号的,则 192.168.0.255 等地址将引发 ArgumentOutOfRangeException。这可能是由于IPAddress(Int64)
不接受大于 0x00000000FFFFFFFF 的值但从 Int32 转换时 (net-order)192.168.0.255 的 Int64 表示为 0xffffffffff00a8c0 引起的吗?
即使 IP 地址没有任何签名概念,使用签名类型有什么意义吗?似乎只使用无符号类型会简单得多。
选择签名类型有什么具体原因吗?
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?我很困惑在这种情况下会发生什么。这也是我最关心的问题,因为我经常使用这样的字符。
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中的示例。