C语言_位运算2

0.写在前面

本博文为C语言_运算符1的继续,因此其编号顺序继承自原博文

2. C位运算符

2.3 位移运算符

位移运算符包括左移动<<运算符 和 右移>> 运算符

2.3.1 左移运算符:<<

左移运算符<< 将其左侧运算对象每一位的值向左移动其右侧运算对象指定的位数。左侧运算对象移出左末端位的值丢失,用0填充空出的位置。

如:

10001010<< 2 //表达式
00101000 //结果值

该操作产生新的位值,但不改变原来运算对象的值

如:

int stonk=138;//stonk=10001010
int moveVal=2;
int newStonk = stonk<<moveVal;
printf("stonk=%d\nnewStonk=%d\n",stonk,newStonk);

out

2.3.2 右移运算符:>>

右移运算符>> 将其左侧运算对象每一位的值向右移动其右侧运算对象指定的位数。左侧运算对象移出右末端位的值丢失。

对于无符号类型,用0填充空出的位置;
对于有符号类型,其结果取决于机器,空出的位置可以用0填充,或者用符号位的副本填充

无符号类型实例:

(10001010)>>2 //表达式,无符号值
00100010  //所有系统都得到该值

有符号型实例:

(10001010) >> 2 //表达式 有符号值
00100010    //某些系统上的结果
同样的1000101/
(10001010)>> 2 //表达式值,有符号
11100010      //在另一些系统上的结果值

注意:

右移运算符在对有符号型数进行运算过程中,会因为机器型号问题,产生计算结果的差别

2.4 位移运算符使用场景
2.4.1 乘除法应用

使用位移运算符进行乘除法运算要比普通的乘除法运算符*、/ 运算效率更高

乘法运算:

unsigned int val=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值