该程序将如何执行?
#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
的二进制表示?
答案 0 :(得分:1)
对于语句b = (int)a;
,我们将char
类型转换为int
。假设char
是隐式签名的(NB:并非总是如此!)而且int
是32位,那么char
值0xAA
会因符号扩展而变宽,所以{ {1}}变为0xAA
,相当于十进制的0xFFFFFFAA
。
答案 1 :(得分: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
第3行:通过类型转换将char a
的值分配到char
到int
。它将输出一个int值。
第4行:以int格式
输出char
a的值
第5行:通过右移将其重新分配给4。
第6行:以十六进制格式输出b的值。所以输出应该是某种东西,例如; FFAA454就像。
这就是您的代码的工作方式。
答案 2 :(得分:0)