最高位就是最左边的一位,比如8位的二进制数1100 1010最高位为1 然后依次往右数,一般习惯称最右边的一位为第0位(2的0次方),或者最低位,所以对于8位二进制数,最高位就记作第7位.需要注意,比如8位二进制数 11 0010的最高位为0而不是1.
因为 11 0010 = 0011 0010.
为什么是最高位,这个是595的规定(也有其他的器件规定为先最低位的),就跟中国的车方向盘在左边,英国的车方向盘在右边一个道理.
SER=dat>>7;就是把dat这个8位二进制数右移7位后,赋值给SER,即将dat的最高位赋值给SER.注意是dat>>7,没有赋值操作,所以执行后,dat的值没有改变,原来是什么,现在还是什么.
dat<<=1;就是把dat原来的值左移一位,再赋值给dat,(这次有赋值操作,所以会改变原先的值)多出来的最低位自动用0来填充,比如dat原来为 1101 0111,执行了dat<<=1;后 dat为 1010 1110,其实就是将原数据的第6位(从左边数第2位),移到第7位.等下次执行 SER=dat>>7;时,将之赋下一次的DAT,依此类推,直到执行完循环. |