5.3.5 和二进制极为密切的运算符
本小节的运算符需要借助二进制概念来理解。
二进制数据中,比如一个字节的数据,它的十进制为228,二进制就为11100100,如图5.11,
注意:如果不懂怎么转换十进制和二进制,可以借用windows的计算器来辅助。
图5.11 228的十进制和二进制表现
把 11100100 整体往右边挪动一位,就会变为01110010。如果觉得不好理解?请这么想,有一条火车轨道,轨道只有八节,一列无限长的火车在这八节轨道上来回移动,如图5.12所示,
图5.12 想象出的场景1
火车启动前,在轨道上对应的车厢上标有一串数字 11100100,没有对应的车厢统一设数字为0,如图5.13,
图5.13 想象出来的场景2
当火车往右移动一格的时候,在轨道上车厢显示的数据就为 01110010,当火车往右移动两格的时候,轨道上车厢显示的数据就为00111001。
以上就是数据右移的表现,同理,数据左移就好比刚才那列火车向左移动,总之八节轨道上的车厢只能显示8个数字。
再看看十进制的228,二进制为11100100,右移一位变为01110010,十进制值为114,在C语言中有移位运算符 >> 和 << 专门用来让数据移位,如下代码,
#include <stdio.h> void main() { unsigned char a = 228; unsigned char b = 0; b = a >> 1; printf("b = %d\n", b); }