C语言把int型变量A高位赋值给char型变量B;其中int 型为16位,char型变量为8位;

2024年11月21日 20:20
有5个网友回答
网友(1):

右移操作需要区分有符号右移和无符号右移,无符号数右移时在前面补零,有符号数右移时在前面补符号位(0或1)

本题16位int型转化为8位char型,int型的高8位将被阶段,实际传给char型的数值只有低8位,可以用:

B = (char)(A>>8);实现,

加上后面的&有利于代码的规整性与可读性(表明你考虑到了右移操作的有符号和无符号的区别),可以这样写:

B = (char)((A>>8)&0x00ff);(注意括号与优先级,强制转换优先级高于&)

另外c语言中使用(char)的强制转换方式,而static_cast是属于标准c++的强制转化方式

网友(2):

B = static_cast(A>>8);//这句就已经做到你的要求

实际可以分两部
A &= 0xff00;
取高位
char B = static_cast(A >> 8);
其实和上面的一样

网友(3):

后面的与运算其实不需要,前面char进行了强制类型转换,只保留低八位

网友(4):

B=(char)((A>>8) &0x00ff)
应该这样吧。优先级好像不是很准确

网友(5):

static_cast 是强制类型转换
和B=(char)(A>>8) 是一样的