2个回答
展开全部
要了解移位运算,需明白二进制计数
以单字节为例,比如0x55=0b01010101
如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa
从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
例如:
unsigned char a;
a=1; //0b00000001
a<<=1; //0b00000010 a左移1位等效于a=a*2
a<<=2; //0b00001000 a左移2位等效于a=a*2的2次方(4)
a<<=3; //0b01000000 a左移1位等效于a=a*2的3次方(8)
a<<=1; //0b10000010 a左移1位等效于a=a*2
a<<=1; //0b00000000 a再次左移1位后溢出了,结果变成0了
c=a<<b; 在变量都是8位的时候,等效于 c=(a*pow(2,b))%256
以单字节为例,比如0x55=0b01010101
如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa
从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
例如:
unsigned char a;
a=1; //0b00000001
a<<=1; //0b00000010 a左移1位等效于a=a*2
a<<=2; //0b00001000 a左移2位等效于a=a*2的2次方(4)
a<<=3; //0b01000000 a左移1位等效于a=a*2的3次方(8)
a<<=1; //0b10000010 a左移1位等效于a=a*2
a<<=1; //0b00000000 a再次左移1位后溢出了,结果变成0了
c=a<<b; 在变量都是8位的时候,等效于 c=(a*pow(2,b))%256
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要了解移位运算,需明白二进制计数
以单字节为例,比如0x55=0b01010101
如果将该数值左移1位,就变成了
0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa
从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
例如:
unsigned
char
a;
a=1;
//0b00000001
a<<=1;
//0b00000010
a左移1位等效于a=a*2
a<<=2;
//0b00001000
a左移2位等效于a=a*2的2次方(4)
a<<=3;
//0b01000000
a左移1位等效于a=a*2的3次方(8)
a<<=1;
//0b10000010
a左移1位等效于a=a*2
a<<=1;
//0b00000000
a再次左移1位后溢出了,结果变成0了
c=a<<b;
在变量都是8位的时候,等效于
c=(a*pow(2,b))%256
以单字节为例,比如0x55=0b01010101
如果将该数值左移1位,就变成了
0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa
从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
例如:
unsigned
char
a;
a=1;
//0b00000001
a<<=1;
//0b00000010
a左移1位等效于a=a*2
a<<=2;
//0b00001000
a左移2位等效于a=a*2的2次方(4)
a<<=3;
//0b01000000
a左移1位等效于a=a*2的3次方(8)
a<<=1;
//0b10000010
a左移1位等效于a=a*2
a<<=1;
//0b00000000
a再次左移1位后溢出了,结果变成0了
c=a<<b;
在变量都是8位的时候,等效于
c=(a*pow(2,b))%256
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询