http://zhidao.baidu.com/question/375792284.html 您好,你对这道题的回答我看了,意思是说

意思是说,必须吧xx[i][j]<<4这个数值变成(通过赋值语句强制转化为)char型对吗?如果不转化,即直接if((xx[i][j]<<4)>100),这样是错的是吗?... 意思是说,必须吧xx[i][j]<<4这个数值变成(通过赋值语句强制转化为)char型对吗?
如果不转化,即直接if((xx[i][j]<<4)>100),这样是错的是吗?
展开
zhjiemm
2012-02-26 · TA获得超过2643个赞
知道大有可为答主
回答量:1834
采纳率:75%
帮助的人:717万
展开全部
您好,
xx[i][j] 本身是char类型,这个是不会错的。

但xx[i][j]<<4后,运算的结果是一字节的高4位就会位移到第二字节的低4位上,这样数值就会超出原来char所表示的范围,

如果仅仅是把这个值赋给一个char变量的话,就不存在取值范围的问题,如:
char a = xx[i][j]<<4; 那么a就是一个字节,这时的结果是正确的。

但是, xx[i][j]<<4 后,本为是一个字节的值,要和一个整数(100)去比较,那 xx[i][j]<<4 的结果就会强制转换为高类型的变量值(char转换为int类型),那结果就是不正确的。

所以必须把它给舍弃了,也就是要用位与(&)的方式操作(& 0x0f)。

是保证一个字节的正确性。
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式