关于这个概念,是我从工作中学习的,虽然在读书的时候就应该要掌握,但是在开发中,这项技能尤其重要。我是做嵌入式开发的,在嵌入式开发过程中,如何对数据操作必然是不可缺少的问题,接下来,我们来看一个例子:
#include
int main(void)
{
unsigned int temp = 0x10 ;
unsigned int high = (temp - temp % 0x10) / 0x10 ;
unsigned int low = temp % 0x10 ;
printf("high:%u low:%u\n",high , low) ;
return 0 ;
}
这个例子就是将0x10这个无符号整型数进行高低位分离,结果就是high = 1 , low = 0 ;大家可以拿笔算一下,是不是这样一个结果。下次要是开发中要你将一个数的高地位分离出来,用这种最普通的算法便可以实现。
接下来,我们来看第二个例子:
#include
int main(void)
{
unsigned int offset = 0x1234 ;
unsigned int high = 0 ;
unsigned int low = 0 ;
high = ((offset >> 8 )& 0xff);
low = (offset&0xff) ;
printf("high = %p->%d low = %p->%d\n",high , high ,low ,low);
C语言中的位操作在嵌入式开发中也是非常常见的,清位,置位,异或,左移,右移,逻辑取反,按位取反,这些概念希望想从事这方面开发的技术人员务必精通它,因为太常见了。
我们来分析一下这个例子,首先这道题其实就是将一个16进制的高低8位进行分离,offset = 0x1234 ,将这个数右移8位,然后与上0xff便取到了这个数的高8位12,将offset与上0xff便取到了这个数的低8位,这样就达到了分离高地位的目的,这种方法比较简单,不理解的,把它记住就行了,下次直接用。
接下来,我们来看第三个例子:
#include
int RecordBuffer[10];
int buff