一、C语言中左移与右移理解
左移(<<):把运算符左边的运算数的每个二进制位全部左移若干位,移动的位数由左移运算符右边的数指定,高位舍掉,低位补0。左移将原数乘以2。
PS: 十进制数170,转换二进制为:1010 1010
170<<2得到二进制:1010 1010 00。170左移两位相当于乘以2,再乘以2,结果为680。
右移(>>):把运算符左边的运算数的每个二进制位全部右移若干位,移动的位数由左移运算符右边的数指定。右移将原数除以2。
PS: 十进制数170,转换二进制为:1010 1010
170>>2得到二进制:1010 10。170左移两位相当于除以2,再除以2,结果为42。
二、C语言大小端
1、大小端概述:
大端模式:将一个数据的低字节内容放到高地址中,数据的高字节内容放到低地址中。
小端模式:将一个数据的低字节内容放到低地址中,数据的高字节内容放到高地址中。
2、大小端数据存储
PS:数据0x12345678分别以大小端存储的格式存储地址0x1000开始存放。
存储地址 0x1000 0x1001 0x1002 0x1003
大端格式: 12 34 56 78
小端格式: 78 56 34 12
3、实践操作说明
如下定义是以32位MCU为例,对应小端格式存储。则Data[0]存放的是bit8-bit15的数据,Data[1]存放是Bit0-Bit7的数据。
(*Data)[ 0] =(Bit8-10对应的数据)& 0x07U);
(*Data)[ 0] |=(Bit11-15对应的数据)<<3 & 0x0F8U);
(*Data)[ 1] =(Bit0-7对应的数据)& 0xFFU);