C语言之位移位运算符和按位运算符

来源:互联网 发布:淘宝限制发布商品怎么办 编辑:程序博客网 时间:2024/06/06 05:27

近期做串口实验,遇到将十六进制转换成char型字符的问题,程序中用到了位移位运算符和按位或运算符

a. 位移位运算符

     << 左移,>>右移

     运算符左边为移位对象,右边为要移的位数。移位对象为整数值(若 char a = 61, 则 a 也可以作为移位对象,若 char a = ‘a’,则会出错。总之,你要移的对象一定是一个整数)。若为左移,不论是有符号还是无符号,移出位丢失,空出位补0;若为右移,对于有符号,空出位补原符号位。

     例子:

                    int a = 5; 

                    a >>= 1; // 此时a为2,右移一位相当于除2(速度上要比除法快)

     注:a >> 1, a 本身的值不会改变, a >>= 1 相当于 a = a >> 1


b. 按位或运算符

     char a;

     char b = 4;

     char c = 12;

    a = (b << 4) | c;

     打印 a 为 'L'

     b 的二进制表示为 100, 左移4位为 1000000, c 的二进制表示为 1100,二者或运算(相应位有1则1),结果为 1001100,对应十进制为76,对应字符‘L’。