51单片机——跑马灯详解

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned char temp = 0xFE;
    int num; // temp 转化为十进制数字
    char j[20]; // 二进制数字字符串
    while(1){
        num = temp;
        itoa(num,j,2); // 十进制转二进制 itoa(待转,输出,进制)
        printf("%s\n",j); // 输出转换后的二进制编码
        temp = (temp << 1) | 0x01; //temp << 1代表二进制数左移一位,最低位补零
                                   // | 代表二进制逐项为进行或运算(有1出1,无1出0)
        if(0xFF == temp)
            temp = 0xFE;
    }
    return 0;
}

unsigned char:

unsigned char表示无符号字符型,unsigned int表示无符号整型
他们在计算机中占用的内存大小不同,unsigned char 占8位,即1个字节,是以二进制补码的方式存储,能表示的数据范围是0~255(即0x00-0xFF),而unsigned int一般占32位,即4个字节,能表示的数据范围是0~65535。

<< (左移):

运算规则:
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
语法格式:
需要移位的数字 << 移位的次数
例如: 3 << 2,则是将数字3左移2位
计算过程:
3 << 2 首先把3转换为二进制数字0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 1100,则转换为十进制是12。

位运算:

   & 按位与      | 按位或        ^ 按位异或
(有0则0,全1为1) (有1则1,全0为0) (相同为0,不同为1) 1 & 1 = 1      1 | 1 = 1      1 ^ 1 = 0 1 & 0 = 0     1 | 0 = 1      1 ^ 0 = 1 0 & 1 = 0     0 | 1 = 1      0 ^ 1 = 1 0 & 0 = 0      0 | 0 = 0      0 ^ 0 = 0
posted @ 2018-03-28 11:20  MO_OF  阅读(3002)  评论(0编辑  收藏  举报