问题标签 [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 投票
1 回答
500 浏览

c - gcc 常量的隐含符号

我在 gcc 对常量符号的解释中遇到了一些有趣的行为。我有一段代码(大大简化)如下所示:

当我编译上述内容时,我得到了warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

一切都很好 - 似乎 gcc 将十六进制常量解释为无符号,并且不喜欢与有符号整数进行比较。但是,如果我将定义更改为类似#define SPECIFIC_VALUE 0x7FFFFFFF的内容,警告就会消失。同样,我并不感到特别惊讶——符号位为零会使 gcc 更乐意将常量解释为有符号值。真正让我吃惊的是,如果我将定义更改为#define SPECIFIC_VALUE INT32_C(0xFFFFFFFF),我仍然会收到警告。我希望明确告诉编译器将我的常量解释为有符号值会使警告静音。

0 投票
2 回答
37268 浏览

c - 传递参数中的指针目标在符号上不同

我已经阅读了类似的问题,但在这种情况下,我无法找到一个可以帮助我理解此警告的问题。我在尝试学习 C 的第一周,所以提前道歉。

我收到以下警告并注意:

尝试编译此代码时:

我删除了无用的部分,包括打开端口和初始化 fs 的部分。

0 投票
1 回答
291 浏览

clojure - 右移 32 位整数

Clojure 的位移操作似乎都返回 64 位long结果,即使对于 32 位int参数也是如此。这不是一个实质性问题bit-shift-left

但是,这成为负数无符号右移的问题:

正确的答案当然是0f234567

在 Clojure 中实现 32 位无符号右移的最有效方法是什么?

0 投票
3 回答
1441 浏览

c - 有符号整数模无符号整数会产生无意义的结果

我需要在 C 中执行一个真正的数学模运算。对我来说,对于 moduled 参数允许负数是有意义的,因为我的模计算会产生负的中间结果,必须将其放回最小残留系统。但是允许负模块是没有意义的,因此我写了

但是用负数和正模块调用这样的函数

产生输出

我不明白为什么。你能解释一下吗?

编辑:我知道运算符 % 不同于数学模,我知道它是如何定义正数和负数的。我在问它会为不同的签名做些什么,而不是不同的签名。

0 投票
3 回答
683 浏览

c++ - 为什么 fstream.read 和 fstream.write 使用 char 而不是 unsigned char?

据我所知,read()是否write()可以直接从文件读取字节或向文件写入字节,并且我被告知bytec++ 中的 a 等价物是unsigned char,那么为什么它们将char指针作为参数?

另外,请从我发现的“bmp 文件图像阅读器”库中查看此函数:

为什么这_ifs->read()条线仍然有效?从 unsigned char 转换为 char 强制数据丢失,不是吗?

0 投票
1 回答
59 浏览

python - gdb python pretty printer uint64_t 被解释为签名

当我尝试使用时:

它打印
2929725441843584891:28a879c45a82df7b
But also
9918728419520062851:-7659990ddaef5a7d

当最高有效位设置为val时,它被解释为有符号。

fData[]uint64_t

我怎样才能避免这种情况?我所有的值都应该是无符号的。

0 投票
1 回答
341 浏览

c++ - Visual Studio 2015:std::make_unique 中没有带符号/无符号不匹配警告?

我刚刚在我的代码中发现了一个错误,我很困惑它可能会发生,因为它是一个简单的有符号/无符号不匹配 - 这根本不应该发生,因为我正在编译警告级别 4,警告为错误。所以我试图重现它,这很简单:

现在我问自己:这是什么原因?它是 VS 中的错误,还是 std::make_unique 的普遍缺点?有什么办法可以解决吗?(Visual Studio 2015 社区更新 3)

0 投票
2 回答
709 浏览

c - 无法对齐“指针目标签名”

我一直在为这个问题苦苦挣扎一段时间,这段代码

给我错误

初始化中的指针目标在符号上不同 [-Wpointer-sign]

在以下代码中将其更改为仅char *unsigned char *不产生影响,并const char *导致程序进一步抱怨应该使用 PMTK 的位置:

该程序应该使用 HAL 驱动程序建立从 STM32F0xx 到 GPS 接收器 (SIM33ELA) 的 uart 通信。

0 投票
3 回答
365 浏览

assembly - x86 程序集中的冲突符号:movsx 然后是无符号比较/分支?

我对以下代码段感到困惑:

这似乎有冲突。Var_8 似乎是在它得到符号扩展的帐户上签名的。然而, jnb 暗示 var_8 未在帐户上签名,它是未签名的比较。

那么,var_8 是有符号的还是无符号的?那么arg_0呢?

0 投票
1 回答
436 浏览

c - 函数返回类型是无符号的,而它返回 -1 表示错误

我已经使用 libnet 一段时间了,我注意到有一些函数的返回值是uint32_t,据我了解,它是无符号类型。但是,在文档中,它说如果发生错误(这是有符号类型)返回 -1 libnet_get_ipaddr4libnet_get_prand例如,请参见。

但是,我可以毫无问题地使用这些功能:

if ((src_ip_addr = libnet_get_ipaddr4(l)) == -1) { /* treat the failure*/ }

我想比较发生在 -1 解释为 unsigned int 与返回值之间,返回值取相同的值;比较是真的。

尽管这显然有效,但我的问题是:这有意义吗?为什么?作为程序员,我应该如何检查返回值以了解是否发生错误?上面显示的代码片段是否正确?