Tag: 签名签名

C如何处理符号扩展?

我有一个指向字节缓冲区的指针,我将每个偶数索引字节复制到一个int(因为数据存储到缓冲区的协议我知道奇数循环用于读取)。 现在当我这样做 signed int a; … //inside a loop a = buffer[2*i]; //buffer is unsigned 它给了我一个未签名的号码。 但是,当我这样做 a = (int8_t)buffer[2*i] 号码以签名forms呈现。 这迫使我重新思考c中的符号扩展如何工作,特别是在上面的场景中。 我的理解是,因为我声明一个已签名的编译器将自动执行符号扩展。 任何人都可以花点时间解释为什么不是这种情况。 我只是花了一个小时在这个陷阱中,并且不希望将来再陷入同样的​​陷阱。

将无符号变量分配给有符号值的处理是什么?

我正在看的这个代码有很多地方我看到这样的事情发生: char *functionName(char *passedVariable) { unsigned char *newVariable = (char* ) passedVariable; 为什么这样做? 我总是试图在使用signed / unsigned时保持一致,因为我知道在两者之间切换可能会导致问题,但是这个开发人员似乎并不关心。

在C中,为什么“signed int”比“unsigned int”更快?

在C中,为什么signed int比unsigned int更快? 是的,我知道这个网站已被多次询问和回答(链接如下)。 但是,大多数人都说没有区别。 我编写了代码并意外地发现了显着的性能差异。 为什么我的代码的“未签名”版本比“签名”版本慢(即使在测试相同的数字时)? (我有一个x86-64英特尔处理器)。 类似的链接 签名比无符号整数更快 无符号vs有符号整数的性能 编译命令: gcc -Wall -Wextra -pedantic -O3 -Wl,-O3 -g0 -ggdb0 -s -fwhole-program -funroll-loops -pthread -pipe -ffunction-sections -fdata-sections -std=c11 -o ./test ./test.c && strip –strip-all –strip-unneeded –remove-section=.note –remove-section=.comment ./test signed int版本 注意:如果我在所有数字上明确声明了signed int ,则没有区别。 int isprime(int num) { // Test if a signed int is prime […]

C(输出)中的无符号和有符号值

signed int x = -5; unsigned int y = x; y的价值是多少? 怎么会这样?

C中的无符号hex常量?

C是否处理hex常量(例如0x23FE)和有符号或无符号的int?