这个程序将如何执行?
#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
存储在其中的二进制表示吗?
这个程序将如何执行?
#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
存储在其中的二进制表示吗?
对于语句b = (int)a;
,我们将 a 类型转换为char
a int
。假设它char
是隐式带符号的(注意:并不总是如此!)并且int
是 32 位,那么该char
值0xAA
会随着符号扩展而变宽,因此0xAA
变为0xFFFFFFAA
相当于-86
十进制。
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 char
to赋值int
。它将输出一个 int 值。
char
第 4 行:以 int 格式输出 a 的值
第 5 行:通过将 b 右移到 4 来重新分配 b 的值。
第 6 行:以十六进制格式输出 b 的值。所以输出应该是一些东西,例如;FFAA454 之类的。
这就是您的代码的工作方式。