小编Goo*_*die的帖子

为什么数字在转换为无符号类型时会进行符号扩展?

我正在研究C如何通过位模式在内存中存储数据。
然而,在格式化方面我遇到了一些问题printf

我已将一个变量保存为-10(我确实理解二进制补码),将另一个变量保存为246. 这两个变量的位模式为11110110(即0xF6)。

我试图使用unsigned int十六进制格式打印出一个值printf

char a = -10; 
unsigned char b = 246;

printf("a : %x , b : %x\n" , (unsigned int) a, (unsigned int) b);
//a : fffffff6 , b : f6
Run Code Online (Sandbox Code Playgroud)

两个整数具有相同的位模式0xF6。但是,如果我执行类型转换到unsigned int,结果会有所不同。结果0xFFFFFFF6a,而b保持不变。

对于有符号字符,在我看来,类型转换过程将 变为unsigned char整数,并用 1 填充所有空位。

这是因为他们的签名吗?或者这只是未定义的行为?

c printf

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

标签 统计

c ×1

printf ×1