标题: C语言<<或>>的问题 [打印本页]

作者: xnysfh    时间: 2023-6-17 13:32
标题: C语言<<或>>的问题
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是为什么


作者: xuyaqi    时间: 2023-6-17 14:09
>>4是右移四位
作者: 人中狼    时间: 2023-6-17 14:13
不是去掉,是左右移位
作者: Hephaestus    时间: 2023-6-17 14:18
<<是左移,右边补零。
作者: chxelc    时间: 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

以上只针对无符号整型数据,其它数据类型更复杂一些。
作者: 13205495918    时间: 2023-6-17 15:37
5楼正解,这个要分逻辑移位和算术移位的,建议找本书好好看看这一部分
作者: 王秋冬    时间: 2023-6-17 17:04
向5楼致敬,讲解的详细,多谢。
作者: 君工创    时间: 2023-6-17 22:27
<<左移4位,低4位补0。
作者: lhj1120    时间: 2023-6-18 07:44
低四位左移到高四位,低四位补0
作者: xnysfh    时间: 2023-6-21 10:42
chxelc 发表于 2023-6-17 14:41
4 就变成 0000 1011

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

参考了五楼的说明,已解决问题,谢谢大家参与讨论
作者: shuaishuai01    时间: 2023-6-21 10:55
>>4不是去掉第四位,这是右移4位,空出的高位用0补齐,例如:0110 0010   右移4位以后的结果为0000 0110
<<4为左移4位,空出的低位用0补齐,例如:0110 0010   左移4位以后的结果为0010 0000
作者: oldhawk    时间: 2023-6-21 11:21
<<4  , DataBuffer[0] |= (Blink_State << 4);  将状态高四位去掉,低位向高位移动4位,同时低四位补0
作者: 633321    时间: 2023-6-21 11:47
移位后用0替代
作者: 芯菲    时间: 2023-6-25 10:34
左移4位,并补4个0。
作者: 乐大起大落    时间: 2023-6-25 20:20
<<4 是左移4位,把低四位移到高四位,例如 1111 0001    <<4    变成   0001 0000
作者: 私塾    时间: 2023-7-10 10:16
建议偶尔去b站复习复习基础知识在学习新知识的时候别忘了回头看看
作者: 2027231725    时间: 2023-7-10 16:55
你可以自己先表示成二进制移位看看
作者: AwmSword    时间: 2023-7-12 14:23
<<,>>是左右移位
作者: wyh1342023    时间: 2023-7-13 16:24
对于2进制,>>4往右移动四位,左边缺失补零,<<4往左移动四位,右边确实补零。
对于10进制表示来说,往左移四位等于原数乘上2的4次方(16),往右移四位等于原数除以2的4次方(16)
作者: XIAOCAO123    时间: 2023-7-13 16:44
>>4这是右移4位,然后高四位补零
作者: hihohopoiui    时间: 2023-7-14 08:24
不是去掉,是左右移位
作者: 宁安乐    时间: 2023-7-14 10:23
>>4是右移四位,<<4是左移四位,就比如一个二进制数原来为10110110,如果取这个数10110110>>4的话,就是整体的这个数往右移了四位,那么原本的低四位就移出去了,而高四位就恰好移到了低四位的位置,后面移过来的就补零,也就是最后数值为00001011,也就如你所说好像去掉了低四位,同理<<4也是这个原理




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1