找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1770|回复: 21
打印 上一主题 下一主题
收起左侧

C语言<<或>>的问题

  [复制链接]
回帖奖励 10 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:1079270 发表于 2023-6-17 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
if(BLINK_KEY == 0)
           {         
               if(BLINK_Shake == Long_Set_Sak)
              {
                       if(Blink_State ++ >= 3)        Blink_State = 0;  
                       DataBuffer[0] &= 0xcf;
                       DataBuffer[0] |= (Blink_State << 4);
                       spi_send_en = 1;
               }
               if(BLINK_Shake++ >(Long_Set_Sak + 1))                BLINK_Shake = Long_Set_Sak + 1;
           }

>>4是去掉低四位
<<4是为什么

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2023-6-17 14:09 | 只看该作者
>>4是右移四位
回复

使用道具 举报

板凳
ID:384109 发表于 2023-6-17 14:13 | 只看该作者
不是去掉,是左右移位
回复

使用道具 举报

地板
ID:883242 发表于 2023-6-17 14:18 | 只看该作者
<<是左移,右边补零。
回复

使用道具 举报

5#
ID:712097 发表于 2023-6-17 14:41 | 只看该作者
<<4左移4就是:丢弃高4位,0补低4位
如:二进制数 1011 0110 <<4 就变成 0110 0000

>>4右移4就是:丢弃低4位,0补高4位
如:二进制数 1011 0110 >>4 就变成 0000 1011

以上只针对无符号整型数据,其它数据类型更复杂一些。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:908826 发表于 2023-6-17 15:37 | 只看该作者
5楼正解,这个要分逻辑移位和算术移位的,建议找本书好好看看这一部分
回复

使用道具 举报

7#
ID:149799 发表于 2023-6-17 17:04 | 只看该作者
向5楼致敬,讲解的详细,多谢。
回复

使用道具 举报

8#
ID:965189 发表于 2023-6-17 22:27 | 只看该作者
<<左移4位,低4位补0。
回复

使用道具 举报

9#
ID:52571 发表于 2023-6-18 07:44 | 只看该作者
低四位左移到高四位,低四位补0
回复

使用道具 举报

10#
ID:1079270 发表于 2023-6-21 10:42 | 只看该作者
chxelc 发表于 2023-6-17 14:41
4 就变成 0000 1011

以上只针对无符号整型数据,其它数据类型更复杂一些。

参考了五楼的说明,已解决问题,谢谢大家参与讨论
回复

使用道具 举报

11#
ID:1085316 发表于 2023-6-21 10:55 | 只看该作者
>>4不是去掉第四位,这是右移4位,空出的高位用0补齐,例如:0110 0010   右移4位以后的结果为0000 0110
<<4为左移4位,空出的低位用0补齐,例如:0110 0010   左移4位以后的结果为0010 0000
回复

使用道具 举报

12#
ID:1066657 发表于 2023-6-21 11:21 | 只看该作者
<<4  , DataBuffer[0] |= (Blink_State << 4);  将状态高四位去掉,低位向高位移动4位,同时低四位补0
回复

使用道具 举报

13#
ID:1085336 发表于 2023-6-21 11:47 | 只看该作者
移位后用0替代
回复

使用道具 举报

14#
ID:1063563 发表于 2023-6-25 10:34 | 只看该作者
左移4位,并补4个0。
回复

使用道具 举报

15#
ID:1085906 发表于 2023-6-25 20:20 | 只看该作者
<<4 是左移4位,把低四位移到高四位,例如 1111 0001    <<4    变成   0001 0000
回复

使用道具 举报

16#
ID:1087595 发表于 2023-7-10 10:16 | 只看该作者
建议偶尔去b站复习复习基础知识在学习新知识的时候别忘了回头看看
回复

使用道具 举报

17#
ID:1087984 发表于 2023-7-10 16:55 | 只看该作者
你可以自己先表示成二进制移位看看
回复

使用道具 举报

18#
ID:1088211 发表于 2023-7-12 14:23 | 只看该作者
<<,>>是左右移位
回复

使用道具 举报

19#
ID:1074254 发表于 2023-7-13 16:24 | 只看该作者
对于2进制,>>4往右移动四位,左边缺失补零,<<4往左移动四位,右边确实补零。
对于10进制表示来说,往左移四位等于原数乘上2的4次方(16),往右移四位等于原数除以2的4次方(16)
回复

使用道具 举报

20#
ID:189206 发表于 2023-7-13 16:44 | 只看该作者
>>4这是右移4位,然后高四位补零
回复

使用道具 举报

21#
ID:1088376 发表于 2023-7-14 08:24 | 只看该作者
不是去掉,是左右移位
回复

使用道具 举报

22#
ID:1038977 发表于 2023-7-14 10:23 | 只看该作者
>>4是右移四位,<<4是左移四位,就比如一个二进制数原来为10110110,如果取这个数10110110>>4的话,就是整体的这个数往右移了四位,那么原本的低四位就移出去了,而高四位就恰好移到了低四位的位置,后面移过来的就补零,也就是最后数值为00001011,也就如你所说好像去掉了低四位,同理<<4也是这个原理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表