关于按位左移<<
本帖最后由 LukaDoncicY77 于 2021-10-24 15:34 编辑#include <stdio.h>
int main()
{
int a=46;
printf("%d ",a>>3);
printf("%d ",a<<3);
printf("%d\n",a);
return 0;
}
a左移三位的结果为368
46的二进制为00101110
368的二进制为101110000
为什么46左移三位结果不是01110000
是因为 左移的前三位到上一个字节了吗?
所以是0000000101110000 即101110000 368
46(101110)左移三位结果为 368(101110000) 本帖最后由 jackz007 于 2021-10-24 15:56 编辑
一个数左移一位就是乘一次 2,右移一位就是被 2 除一次
#include <stdio.h>
int main(void)
{
int i , a = 46 , b , c ;
for(b = a , i = 0 ; i < 3 ; i ++) b /= 2 ; /* b = a >> 3 */
for(c = a , i = 0 ; i < 3 ; i ++) c *= 2 ; /* c = a << 3 */
printf("a >> 3 = %d" , b) ;
printf(" , a << 3 = %d\n" , c) ;
}
编译、运行实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
a >> 3 = 5 , a << 3 = 368
D:\00.Excise\C> jackz007 发表于 2021-10-24 15:54
一个数左移一位就是乘一次 2,右移一位就是被 2 除一次
编译、运行实况:
感谢
页:
[1]