左移和右移运算符及pow函数

左移和右移运算符(操作数是右边设定的要移动的位数),不应用于负数。

1) 左移运算符(<<)

  1. 作用:用来将一个数的二进制位左移若干位,移动的位数由操作数决定(操作数必须为非负值),其右边空出来的位用0补上;
    高位左移溢出的舍弃该高位;
    例如:
  unsigned char a =6;//a=6(00000110)
    printf( "a<<1 = %d\r\n , a<<);//(00001100)
    则a<< = 12;

2) 右移运算符(>>)

  1. 作用:用来将一个数的二进制位右移若干位,移动的位数由操作数决定(操作数必须为非负值),移到右边的低位被舍弃,对于无符号的
    高位补0;对于有符号的,有些计算机系统会用1来填补(即算数移位),有些则用0填补(逻辑移位)。
    例如:
 unsigned char a =6;//a=6(00000110)
    printf( "a>>1 = %d\r\n , a>>);//(00000011)
    则a>> = 3;

3)左右移和2的关系

  1. a <<3= a*pow(2,3) a>>3 =a/pow(2,3) 注意:逻辑移位和算数移位的区别
    逻辑移位是将移出去的位丢弃,空缺位用0填补;
    算数移位也是将移出去的位丢弃,空缺位用1填补,一般用于右移位;
//x的n次方函数计算(有个上限值和一个下限值,定义上限值是Max,下限值是1)pow函数
#define Max 1000
void  x_y_value(unsigned short*y, unsigned short*times)
{    
    //定义局部变量
     static unsigned short temp_z =0volatile float x = 0;
     volatile float n = 1.5;

   if(*y > Max)
  {
      *y = Max;
  }
  x = (float)*y / Max;
  *y = powf(temp,n)* Max; ///powf(x,n)x的n次方
  
  if(*time < 1)
  {
     *time++;
     temp_z = *y;
  }
  else
  {
      *y = (*y >>1) + (temp_z >>1;
  }
  
  if(*y >= Max)
  {
     *y = Max + 1;
   }
   else if (*y <1)
   {
       *y = 1;
   }
   else
   {
      *y = *y;
   }
}
  • 小金蛋时刻:I’m just afraid that if I died today, that my life would’ve
    amounted to nothing.
    (我只是怕某天死了,我的生命却一无所有。)
    logic shift:逻辑移位; atithmatic shift:算数移位; vacant bit: 空缺位。 每天进步一点点。。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大山很山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值