本文介绍了如何移位运算符用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评估?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-12 11:47