首页 > 其他分享 >移位操作 优先级 低于+ -优先级

移位操作 优先级 低于+ -优先级

时间:2022-11-03 13:47:00浏览次数:72  
标签:优先级 低于 代码 乘除 C语言 编译器 操作 移位

<< 1效率没* 2效率高


参考链接https://blog.popkx.com/c语言程序中-移位操作代替乘除操作-效率更高吗/

解析
C语言程序中,使用移位操作代替乘除操作更快吗?现在这个问题我们已经有答案了:并不如此。原因在于C语言编译器一般都会优化我们的代码,它知道如何尽可能快地增加目标处理器体系结构的能力,也即尽量生成尽可能快的程序。
因此作为C语言程序员,我们应该做的是明确告诉编译器我们的意图(即到底是 i * 2,还是 i<<1),让它根据上下文决定如何产生更快的指令。
当硬件不支持快速乘除法时,编译器会将乘除法转换为移位和加法/减法的适当组合。因为它知道我们的最终目的,所以有时候显示的写出移位代码,倒不如直接告诉编译器我们的目的,这样才能得到尽可能快的C语言程序。
事实上,有时候简单的移位操作并不等同于乘除法,而且有些乘法并不能通过简单的移位实现,例如:

-5 / 2  = -2
-5 >> 1 = -3
i*3 = (i<<1) + i
i*10 = (i<<3) + (i<<1)

因此,使用移位操作代替乘除法操作可能会带来预计之外的结果。而且有些移位组合也会让同事难以理解这段C语言代码的真实意图,也不利于协作开发和后期维护。
小结
本节讨论了C语言程序开发中,移位操作与乘除法操作的关系,并讨论了它们之间的效率问题。可以看出,我们并不需要纠结二者之间的取舍。事实上,考虑到代码的易读性和编译器的优化特性,我们应该写出“本意”代码,即:希望实现乘除操作时,就写出乘除代码。希望实现移位操作时,就写出移位代码。

标签:优先级,低于,代码,乘除,C语言,编译器,操作,移位
From: https://www.cnblogs.com/zkx98/p/16688782.html

相关文章

  • Binder学习笔记-2——binder优先级传递
    基于Linux-5.10,有补充Linux-5.15的说明一、优先级相关结构体和成员1.structbinder_prioritystructbinder_priority{//binder_internal.hunsignedintsched_......
  • Python判断中使用多个and和or的优先级与踩坑
    tags:PythonDebug一个问题最近刷力扣,想试试Python新支持的海象操作符,其实就是能在语句中赋值,类似下面这样:if(n:=len(nums)):returnFalse但是当出现下面这种......
  • 单网卡设置多IP时Windows下的IP优先级排序问题!(只能做服务器环境):
    本策略只能接收辅助IP收到的包,而无法通过辅助IP发送包,因此只能作为服务器时使用。     局域网下同时单网卡可以设置多IP,同时访问不同网段设备,但普遍而言Windows并......
  • nginxlocation优先级
    nginx反向代理一个server下配置多个location域名问题当你设置两个location/时,当然只会匹配第一个了。你的意思是不是要配置两个域名?server{listen80;server_namewww.1.com;......
  • 运算符与运算符优先级
    运算符算术运算符:+,-,*,/,%,++,--赋值运算符:=,+=,-=,*=,/=关系运算符:>,<,>=,<=,==,!=逻辑运算符:&&,||,!位运算符:&,|移位运算符:<<,>>,>>>条件运算符:?: 优先级1、分隔符2、单目运算(++,--......
  • c语言运算符号(c语言运算符号的优先级表)
    符号的运算系统用英语怎么翻?学生是一个语言、符号的运算系统用英语学生是一个语言、符号的运算系统Thestudentistheoperationsystem,alanguagesymbolc语言运算符号......
  • c语言运算符优先级表(c语言中各种运算符的优先级)
    运算符的优先级是怎样的?运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符()和逗号运算符c语言上运算符优先级是怎样......
  • ctfshow web181(sql注入where后运算符优先级利用)
    //拼接sql语句查找指定ID用户$sql="selectid,username,passwordfromctfshow_userwhereusername!='flag'andid='".$_GET['id']."'limit1;";//对传入的参数......
  • java线程的优先级
    packageA_ShangGuiGu.Thread.ThreadDemo;/***优先级*1.MAX_Priority-----最大优先级为10*2.MIN_Priority-----最小优先级为1*3.NORM_Priority----默认优先级5*4......
  • 移位运算用法总结
    参考链接:https://blog.csdn.net/qq_34364995/article/details/80544465比如1<<left,看怎么移位的1的二进制为0000000000000001,比如当left=2时,即1要左移2位,变成000000......