LukaDoncicY77 发表于 2021-10-24 15:20:31

关于按位左移<<

本帖最后由 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

傻眼貓咪 发表于 2021-10-24 15:36:24

46(101110)左移三位结果为 368(101110000)

jackz007 发表于 2021-10-24 15:54:58

本帖最后由 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>

LukaDoncicY77 发表于 2021-10-24 15:58:20

jackz007 发表于 2021-10-24 15:54
一个数左移一位就是乘一次 2,右移一位就是被 2 除一次

      编译、运行实况:

感谢
页: [1]
查看完整版本: 关于按位左移<<