hutiann

 

比如一个有符号位的8位二进制数11001101,逻辑右移就不管符号位,如果移一位就变成01100110。算术右移要管符号位,右移一位变成10100110。

逻辑左移=算数左移,右边统一添0

逻辑右移,左边统一添0

算数右移,左边添加的数和符号有关

附上代码:

int sra(int x, int k)
{
    int xsrl = (unsigned) x >> k;
    int w = sizeof(int) << 3;
    return xsrl |= (-1 << (w-k));
} 
unsigned srl(unsigned x, int k)
{
    unsigned xsra = (int) x >> k;
    int w = sizeof(int) << 3;
    return xsra &= ~(-1 << (w - k));
}

 

 

e.g:1010101010,其中[]位是添加的数字

逻辑左移一位:010101010[0]

算数左移一位:010101010[0]

逻辑右移一位:[0]101010101

算数右移一位:[1]101010101

 

 

 

 

分类:

技术点:

相关文章:

  • 2021-05-01
  • 2022-01-14
  • 2021-11-29
  • 2022-02-08
  • 2021-11-05
  • 2021-11-01
  • 2021-06-12
  • 2021-06-04
猜你喜欢
  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-09-29
  • 2021-11-29
相关资源
相似解决方案