首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

【请问】AD转换程序中为什么要按位或

2012-05-21 
【请教】AD转换程序中为什么要按位或今天看了开发板的ADC例程,整个程序比较简单,但是里面有一句我不懂,我已

【请教】AD转换程序中为什么要按位或
今天看了开发板的ADC例程,整个程序比较简单,但是里面有一句我不懂,我已经用黑体标注了,为什么不能直接取得数值然后显示,而是要左移八位然后再与低八位按位或呢?小弟菜鸟,请大家指点!

#include "stdio.h"
#include "sys/types.h"
#include "sys/ioctl.h"
#include "stdlib.h"
#include "termios.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "sys/time.h"
int main(int argc, char **argv)
{
  int fd,ret,adcdat0;
  char buf[2];
  fd=open("/dev/adc_dev",0);
  if(fd<0)
  {
  printf("open adc error\n");
  exit(1);
  }
  else
  {
  printf("success\n");
  while(1)  
  {
  read(fd,buf,2);
adcdat0=buf[1];
adcdat0=adcdat0<<8|buf[0];//这句不理解,为什么要左移八位再按位或呢?
  printf("%x \n",adcdat0);
  sleep(1);
  }
  }
  close(fd);
}


[解决办法]
buf[1]代表高8位,buf[0]为低8位, adcdat0 = buf[1]*256 + buf[0];直接表示,与下面两句是等价的
adcdat0=buf[1];
adcdat0=adcdat0<<8|buf[0];

热点排行