右移操作需要区分有符号右移和无符号右移,无符号数右移时在前面补零,有符号数右移时在前面补符号位(0或1)
本题16位int型转化为8位char型,int型的高8位将被阶段,实际传给char型的数值只有低8位,可以用:
B = (char)(A>>8);实现,
加上后面的&有利于代码的规整性与可读性(表明你考虑到了右移操作的有符号和无符号的区别),可以这样写:
B = (char)((A>>8)&0x00ff);(注意括号与优先级,强制转换优先级高于&)
另外c语言中使用(char)的强制转换方式,而static_cast
B = static_cast
实际可以分两部
A &= 0xff00;
取高位
char B = static_cast
其实和上面的一样
后面的与运算其实不需要,前面char进行了强制类型转换,只保留低八位
B=(char)((A>>8) &0x00ff)
应该这样吧。优先级好像不是很准确
static_cast 是强制类型转换
和B=(char)(A>>8) 是一样的