I2C:总线SDA=dat>>7; dat=dat<<1以及使用C语言输出二级制显示测试

鄙人在看I2C的驱动时,发现如下两条语句:
SDA = dat>>7;
dat = dat<<1;

论坛上的解释如下:
SDA是只能有一个位的信息,如果你让SDA=dat的话(dat是字节):
当dat里任何一位是1的:SDA就会是1
当dat里全部位都是0,SDA就是0

那么SDA要逐一地取dat的每一个位怎么办呢?
①dat>>7:
dat一个字节总共8个位的数据向右移7个位,原来的最高位就移到了最右的位置,左边7个位赋值0,SDA=dat>>7实际也就是取得了原先最高位的值。

②dat=dat<<1:
是让dat左移一位且赋值回来,使原来最高位的溢出,最低位赋值为0。

③重复前面的步骤,重复8次,SDA就会把dat的8个位都给发送完毕。

C语言进行移位测试:

#include <iostream>
#include<stdio.h>

void intobit(int num)
/*
num是要以二进制形式输出的int值
将二进制数据逐个置1,在右移,依次实现逐个输出
*/
{
    int tnum = num;
    int i;
    for (i = 31; i >= 0; i--)
    {
        int tmpa = tnum;
        tmpa = tnum & (1 << i);
        ((i + 1) % 8 == 0 && i != 31) ? printf(" %d", tmpa >> i) : printf("%d", tmpa >> i);
    }
    printf("\n");
}

int main()
{
    int dat = 170;
    intobit(dat);

    int SDA = (dat >> 7);
    intobit(SDA);

    dat = dat << 1;
    intobit(dat);
   
   
    return 0;
}

仅观察低8位二进制:
在这里插入图片描述

资料来源网站:

论坛地址

C语言int转二进制程序

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值