|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目为:填充下边代码,使得打印结果为:-1 和 255
代码如下:
#include <stdio.h>
int main()
{
unsigned char j;
char i;
i = 255;
j = 255;
printf("i的值为:%hhd\n",i);
printf("j的值为:%hhu\n",j);
return 0;
}
我理解这里题目完成的逻辑应该是:i=255→i=11111111→i=1 11111111→反码i=-1
但不太理解这个输出的逻辑。老师作业解答说:hh是表示长度, %d 和 %u 则打印其对应的 ASCII 码(其中 %d 打印带符号数,%u 打印无符号数)
但这段代码是什么时候将255转成2进制的,而ASCII码又是哪里出现的?
请大佬不吝赐教!
这段代码中, i 是一个有符号的 char 变量,而 j 是一个无符号的 unsigned char 变量。为了理解输出结果,我们需要了解以下几个概念:
1. unsigned char:这是一个无符号的 8 位字符类型,表示的范围是 0 到 255。
2. %d 和 %u:这是 printf 函数中的格式化输出指示符。 %d 用于打印带符号整数, %u 用于打印无符号整数。
现在来解释代码的执行过程和输出结果:
- #include <stdio.h>
- int main() {
- unsigned char j;
- char i;
- i = 255; // i 被赋值为 255,即二进制的 11111111
- j = 255; // j 被赋值为 255,即二进制的 11111111
- printf("i的值为:%hhd\n", i);
- printf("j的值为:%hhu\n", j);
- return 0;
- }
复制代码
首先, i 的类型是有符号的 char,范围是 -128 到 127。当将 255(无符号整数)赋值给 i 时,发生了溢出,导致 i 变成了 -1。此时, i 的二进制表示是全 1,即 -1 的补码。
而 j 的类型是无符号的 unsigned char,范围是 0 到 255。因此,将 255 赋值给 j 不会发生溢出,它保持值为 255,即二进制的 11111111。
接下来, printf 函数使用了不同的格式化输出指示符来打印变量的值:
· %hhd:该格式化指示符用于打印有符号的 char 类型。因此, printf("i的值为:%hhd\n", i); 打印的是 -1。
· %hhu:该格式化指示符用于打印无符号的 char 类型。因此, printf("j的值为:%hhu\n", j); 打印的是 255。
注意,ASCII 码并没有直接涉及到这段代码的执行和输出结果。 printf 函数中的格式化指示符 %d 和 %u 仅表示输出整数的十进制表示形式。
如果问题已经解决,请设置最佳答案
|
|