标题:
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