相关疑难解决方法(0)

char默认是签名还是未签名?

在"C的完整参考"一书中,提到char默认情况下是无符号的.

但我试图用GCC和Visual Studio验证这一点.它默认签名.

哪一个是正确的?

c signed types char

145
推荐指数
5
解决办法
8万
查看次数

打印char时会发生哪些整体促销活动?

我最近读过这篇文章

unsigned char x=1;
printf("%u",x);
Run Code Online (Sandbox Code Playgroud)

由于格式说明符%u,因此调用未定义的行为,printf需要unsigned int.但我还是想了解这个例子中发生了什么.

我认为整数推广规则适用于表达式printf("%u",x) 和由...表示的值x.

A.6.1整体推广

无论是否有符号,都可以使用字符,短整数或整数位字段,或者枚举类型的对象,可以在任何可以使用整数的表达式中使用.如果int可以表示原始类型的所有值,则该值将转换为int; 否则该值将转换为unsigned int.这个过程称为整体推广.

"可以使用"是什么意思?这是否意味着"在句法上是正确的"还是"定义的行为"?

在这个例子中如何推广x?我已经读过它被提升为一个int,但是如果printf("%u", (int x))仍然是未定义的行为那么我真的不明白为什么......

c printf variadic-functions undefined-behavior integer-promotion

10
推荐指数
1
解决办法
271
查看次数

为什么是printf("%d",~a); 当a等于3时显示-4?

运行以下程序显示-4,而预期252:

unsigned char a=3;
printf ("%d", ~a);
Run Code Online (Sandbox Code Playgroud)

为什么这段代码不显示252?

我还根据提出的答案测试了下面的内容:

printf ("%u", ~a);
Run Code Online (Sandbox Code Playgroud)

显示:4294967292

printf ("%hu", ~a);
Run Code Online (Sandbox Code Playgroud)

显示:65532

为什么~a不返回unsigned char,因为一个一个unsigned char

我的问题不是我应该怎么做才能显示252?我的问题是为什么没有显示252?

c printf unsigned char negation

3
推荐指数
1
解决办法
159
查看次数

什么原因导致0xA4在读取二进制文件时变为0xffffffa4?

在C中加载二进制文件时,我得到了意想不到的结果.

FILE *bin = NULL;
unsigned long file_length = 0;

bin = fopen("vs.bin", "rb");
fseek(bin, 0, SEEK_END);
file_length = ftell(bin);
fseek(bin, 0, SEEK_SET);

char *buffer = (char *)malloc(file_length);
fread(buffer, 1, file_length, bin);

for(unsigned int i = 0; i < file_length; i++) {
    printf("%02x ", buffer[i]);
}
printf("\n");
Run Code Online (Sandbox Code Playgroud)

我在前八个输出值中看到的是:

56 53 48 05 ffffffa4 ffffff8b ffffffef 49
Run Code Online (Sandbox Code Playgroud)

但是当我在十六进制编辑器中打开二进制文件时,我看到的是:

56 53 48 05 A4 8B EF 49
Run Code Online (Sandbox Code Playgroud)

什么会导致这种情况发生?整个过程中发生了更多这种情况,但我认为只分享第一部分就足以说明问题了.

谢谢阅读.

c

1
推荐指数
1
解决办法
83
查看次数

在c中为char变量赋值128

输出是32位2的128补码,即4294967168.如何?

#include <stdio.h>
int main()
{
    char a;
    a=128;
    if(a==-128)
    {
        printf("%u\n",a);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c signed char

0
推荐指数
1
解决办法
431
查看次数