当前位置: 首页 > news >正文

做的好的家装网站做公司网站500元

做的好的家装网站,做公司网站500元,医疗类网站建设,建设包银行官方网站C元素的效率差异 类型转换signed与unsigned转换整数大小转换浮点精度转换整数到浮点转换浮点到整数转换指针类型转换重新解释对象的类型const_caststatic_castreinterpret_castdynamic_cast转换类对象 类型转换 在C语法中#xff0c;有几种方式进行类型转换#xff1a; // … C元素的效率差异 类型转换signed与unsigned转换整数大小转换浮点精度转换整数到浮点转换浮点到整数转换指针类型转换重新解释对象的类型const_caststatic_castreinterpret_castdynamic_cast转换类对象 类型转换 在C语法中有几种方式进行类型转换 // Example 7.19 int i; float f; f i; // Implicit type conversion f (float)i; // C-style type casting f float(i); // Constructor-style type casting f static_castfloat(i); // C casting operator这些不同的方法有完全相同的效果。使用哪种方法是一个编程风格的问题。下边讨论下不同转换的时间损耗。 signed与unsigned转换 。。。 有符号与无符号整数间的转换只是让编译器以不同的方式解释整数的比特。不检查溢出代码不需要额外时间。 整数大小转换 int i; short int s; i s;一个整数转换成一个位数更长的整数时如果是有符号的通过扩展符号位如果是无符号的通过零扩展。如果是一个算术表达式的结果进行通常需要1时钟周期。如果从内存读取一个变量的值来转换通常不需要额外时间如下 。。。 将整数转换到更小的类型仅仅是忽略高位比特不检查溢出。例如 。。。 这个转换不需要额外时间。它只是保存32位整数的低16位。 浮点精度转换 在使用浮点寄存器栈时float、double与long double间的转换不需要额外时间。在使用XMM寄存器时需要2到15时钟周期取决于处理器。例子 // Example 7.24 float a; double b; a b;在这个例子中如果使用XMM寄存器转换是相对低效的。a与b应该是相同类型以避免。 整数到浮点转换 有符号整数到float或double的转换需要4 ~ 6时钟周期取决于处理器与使用的寄存器类型。无符号整数的转换需要更长时间除非AVX512指令集可用AVX512DQ用于64bit无符号整数。如果没有溢出的危险首先把无符号整数转换到有符号整数会更快的 。。。 浮点到整数转换 浮点值到整数的转换需要非常长的时间除非启用SSE2或更新的指令集。通常转换需要50 ~ 100时钟周期。原因是C/C标准指定截断因此浮点取整模式必须改变为截断再改回来。 如果在代码的关键部分存在浮点到整数转换那么对进行优化是重要的。可能的方案有 使用不同类型的变量避免转换。将中间结果保存为浮点类型将转换移出最里层循环。 。。。 指针类型转换 指针可以被转换到另一个类型的指针。类似的指针可以转换到整数或者整数可以转换到指针。整数有足够的bit位保存指针是重要的。 这些转换不会产生额外的代码。它只是以不同的方式解释相同比特或者绕过语法检查。 当然这些转换不安全。确保结果有效是程序员的责任。 重新解释对象的类型 通过转换地址类型使编译器将一个变量或对象当做另一个类型是可能的 float x; *(int*)x | 0x80000000; // Set sign bit of x这里语法看起来有些奇怪。x 的地址被类型转换为一个整数指针然后通过把x当做整数访问。实际上制作一个指针编译器不产生任何额外的代码真正创造一个指针。这个指针只是被优化掉结果x被处理为一个整数。但 操作符强制编译器在内存而不是寄存器里保存x。上面例子通过使用只能应用于整数的 | 操作符设置 x 的符号位。它比x -abs( x );更快。 在类型转换指针时要小心一些风险 违反严格的标准C别名规则尤其是不同类型的两个指针不能指向相同的对象除了char指针。优化编译器可能在两个不同的寄存器中保存浮点与整数表示。你需要检查编译器的行为是否就是你所期望的。使用联合更安全。如果对象被当做比其实际更大的类型对待该技巧会无效。上面这个代码将出错如果int比float使用更多比特。在x86系统里两者都使用32比特。 。。。 const_cast const_cast用于去除一个指针的const限制。它有一些语法检查因此比C风格的类型转换更安全无需添加任何额外的代码。例如 。。。 static_cast static_cast操作符做的与C形式的类型转换相同。 reinterpret_cast reinterpret_cast操作符用于指针转换。与c风格的转换类似但会进行一些语法检查不产生任何额外的代码。 dynamic_cast dynamic_cast操作符用于将一个类指针转换为另一个类的指针。它对转换的有效性进行运行时检查。例如在一个基类指针被转换为派生类的指针时它检查原始指针是否真的指向派生类的一个对象。这个检查使得dynamic_cast比简单的类型转换更耗时些但也更安全。它可能捕捉到原本没发现的编程错误。 转换类对象 涉及类对象的转换而不是对象指针是看可能的只要程序员定义了说明如何进行这个转换的一个构造函数、一个重载赋值操作符或一个重载类型转换操作符。构造函数或重载操作符与成员函数效率相同。 欢迎交流
http://www.sczhlp.com/news/159791/

相关文章:

  • 个人网站如何在工信部备案哪家做网站好
  • 使用jquery做网站医院网站建设网站
  • 网站建设怎么添加评论自己开公司 自己做网站
  • php可以做手机网站吗智慧物业管理系统
  • 口碑好的定制网站建设公司哪家好wordpress教程之
  • 湖南专业做网站企业化妆品网页设计图片
  • 织梦xml网站地图网站前台做好之后再怎么做
  • 北京建站公司推荐首推万维科技网站建设工作年报
  • 2017自己做网站的趋势大连英文网站建设
  • 台州自助建站做盗版小说网站赚钱嘛
  • 摩刻S10 动感单车 速度传感器故障及更换!
  • 公司网站建设预算公司 网站制作
  • 滕州外贸网站建设石家庄网站制作网站
  • 赣州行业网站建设angularjs做的网站有哪些
  • 做网站的软件是哪个网络推广需要什么技能
  • 营销网站开发哪家好自建站多少钱
  • 装饰公司简介北京网站建设 优化
  • 盐城网站优化推广服务上海市政网
  • 昆山哪里有做网站的广告公司业务推广
  • 城乡建设部统计网站王也电脑壁纸
  • 天津市网站制作公司网站群 优点
  • 上海营销型网站建设网站结构是什么
  • 做程序网站需要什么代码吗京东做代码的网站
  • 江山有做网站开发吗wordpress 数据库导出
  • wordpress建站产品导入不同目录株洲制作网站
  • 最经济 网站建设网站还没上线怎么做品牌推广
  • 用dw做一个个人网站营销手机都有什么功能啊
  • 2025盐酸优质厂家权威推荐榜:高纯度盐酸的品质之选
  • 2025硫酸优质厂家权威推荐榜:高品质与强供应口碑之选
  • 2025冰乙酸供应厂家权威推荐榜:品质卓越与市场口碑双重保障