本文介绍了如何移位运算符用C评估?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
最近,我注意到一个(怪异)的行为,当我进行使用移位操作>>
<<
!
要解释它,让我写这个小的可运行code,做它应该是相同的(在我的理解)两次手术,但我有不同的结果感到惊讶!
的#include<&stdio.h中GT;诠释主要(无效){
unsigned char型A = 0×05,B = 0×05; //第一次手术
一个=((A&所述; 7;)>大于7); //第二次手术
B<< = 7;
B>> = 7; 输出(A =%X B =%X \\ n,A,B);
返回0;
}
在跑, A = 5
和 B = 1
。我希望他们都等于1!可有人好心解释为什么我得到了这样的结果?
P.S:在我的环境 unsigned char型
的大小为1字节
解决方案
移位操作会做整型的提升,其操作数,并在code产生的 INT
转换回字符
是这样的:
//第一次手术
一个=((A&所述; 7;)>大于7); // A =(char)的((A<< 7)>> 7);//第二次手术
B<< = 7; // B =(char)的(B<< 7);
B>> = 7; // B =(char)的(B>> 7);
从N1570草案(成为C11的标准更高版本)报价:
And it's supposed that in C99 and C90 there are similar statements.
这篇关于如何移位运算符用C评估?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!