-4

这个程序将如何执行?

#include <stdio.h>

void main() { 
    char a = 0xAA;
    int b;
    b = (int) a;
    printf("%d\n", a); 
    b = b >> 4;
    printf("%x", b); 
}

[问题]

我的陈述有问题b = (int)a。你能给出b何时a存储在其中的二进制表示吗?

4

3 回答 3

1

对于语句b = (int)a;,我们将 a 类型转换为chara int。假设它char是隐式带符号的(注意:并不总是如此!)并且int是 32 位,那么该char0xAA会随着符号扩展而变宽,因此0xAA变为0xFFFFFFAA相当于-86十进制。

于 2013-08-25T06:31:51.050 回答
1
char a = 0xAA; // line 1
int b; // line 2
b = (int) a; // line 3
printf("%d\n", a); // line 4
b = b >> 4; // line 5
printf("%x", b); // line 6

第 1 行:将一个字符分配给十六进制类型a的变量char

第 2 行:声明类型b的变量int

char a第 3 行:通过类型转换为 from charto赋值int。它将输出一个 int 值。

char第 4 行:以 int 格式输出 a 的值

第 5 行:通过将 b 右移到 4 来重新分配 b 的值。

第 6 行:以十六进制格式输出 b 的值。所以输出应该是一些东西,例如;FFAA454 之类的。

这就是您的代码的工作方式。

于 2013-08-25T06:32:34.210 回答
0

如果您想知道控制台将输出什么,我会得到以下信息:

-86
fffffffa

将来,如果您想查看测试用例是如何执行的,请尝试使用类似这样的东西。

于 2013-08-25T06:22:00.923 回答