作业帮 > 综合 > 作业

关于 C 语言 移位操作的一个小问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 08:25:29
关于 C 语言 移位操作的一个小问题
举个例子,我在Turb C 中写入一段关于位操作的程序
#include "stdio.h"
void main()
{
int x;
unsigned char y,z;
x = 999; // 999(d) = 03E7(H)
y = x >> 8;
z = x;
printf("x = %x y =%x z = %x",x,y,z);
}
运行的结果为 x = 03e7 y = 03 z = e7
我有些疑惑 为什么 z 的值 等于e7,x进行位运算后不是应该等于03,我认为z值应该跟y值相等 (我的想法是错误的),为什么 z 等于e7 而不是03
y = x >> 8;
是将 x 右移 8 位后保存到 y,此时 y 变成 03,但 x 的结果仍然是 03E7.所以当 z = x; 就相当于要把 03E7 放到 1 个字节的 z 变量里,发生了截断,z 等于 e7.