这个程序将如何执行?
#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 类型转换为chara 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 charto赋值int。它将输出一个 int 值。
char第 4 行:以 int 格式输出 a 的值
第 5 行:通过将 b 右移到 4 来重新分配 b 的值。
第 6 行:以十六进制格式输出 b 的值。所以输出应该是一些东西,例如;FFAA454 之类的。
这就是您的代码的工作方式。