C语言左/右移位与大小端格式理解

一、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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值