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),这样是错的是吗? 展开
如果不转化,即直接if((xx[i][j]<<4)>100),这样是错的是吗? 展开
展开全部
您好,
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)。
是保证一个字节的正确性。
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)。
是保证一个字节的正确性。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询