强制类型转换使用时的注意事项
2016-01-28 23:51
225 查看
作为一个软件工程师,在我们平时的学习和工作中会经常使用到强制
类型转换的操作,但是有些操作我们不得不需要注意一下;
例如:
我们在一个64位的操作系统中;
unsigned long ulReg1;
unsigned int uiReg2;
int uiReg3;
1. 此时,我们将uiReg3赋值给uiReg2时,在确保我们的数据
是对于一个正数的操作前提下,给uiReg3做一下(unsigned
int)uiReg3的强制转换操作是毫无问题的;但是如果对于一个负数做
这样的操作显然结果并不是我们想要的;
2. 如果我们需要将uiReg2的值赋值给uiReg1,我们执行
ulReg1 = (unsigned long)uiReg2的操作显然问题也不大,这样
我们还是可以正确的获取我们需要的数据的。但是相反的操作就需要
我们谨慎执行了,我们一定要确认参数数值的范围是否正确;
3. 有时候我们明明知道一个unsigned long类型的数据的确是
只有它的低32有效数据,但是我们如果执行uiReg2 = (unsigned
int)uiReg1操作时还是需要谨慎,因为对于一个地址来说,我们执行
这样的操作时非常危险的,对于x86系统,这样的操作时没有问题
的,但是对于一个小端的处理器系统,我们很可能获取到的仅仅时高
位地址上的无效数据,即这样的操作很可能获取的数据就是0,我在工
作中的确遇到了这样的问题,所以我需要写出来提醒自己这样的问题
需要注意;
作为一名底层软件工作者,不论在什么时候都不能忽视大小端的问题,尤其设计到强制类型转换的时候。
类型转换的操作,但是有些操作我们不得不需要注意一下;
例如:
我们在一个64位的操作系统中;
unsigned long ulReg1;
unsigned int uiReg2;
int uiReg3;
1. 此时,我们将uiReg3赋值给uiReg2时,在确保我们的数据
是对于一个正数的操作前提下,给uiReg3做一下(unsigned
int)uiReg3的强制转换操作是毫无问题的;但是如果对于一个负数做
这样的操作显然结果并不是我们想要的;
2. 如果我们需要将uiReg2的值赋值给uiReg1,我们执行
ulReg1 = (unsigned long)uiReg2的操作显然问题也不大,这样
我们还是可以正确的获取我们需要的数据的。但是相反的操作就需要
我们谨慎执行了,我们一定要确认参数数值的范围是否正确;
3. 有时候我们明明知道一个unsigned long类型的数据的确是
只有它的低32有效数据,但是我们如果执行uiReg2 = (unsigned
int)uiReg1操作时还是需要谨慎,因为对于一个地址来说,我们执行
这样的操作时非常危险的,对于x86系统,这样的操作时没有问题
的,但是对于一个小端的处理器系统,我们很可能获取到的仅仅时高
位地址上的无效数据,即这样的操作很可能获取的数据就是0,我在工
作中的确遇到了这样的问题,所以我需要写出来提醒自己这样的问题
需要注意;
作为一名底层软件工作者,不论在什么时候都不能忽视大小端的问题,尤其设计到强制类型转换的时候。
相关文章推荐
- Android Native 绘图方法
- C#中struct和class的区别详解
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法
- 深入了解PHP类Class的概念
- jquery 表单验证之通过 class验证表单不为空
- setAttribute 与 class冲突解决
- JavaScript中的类(Class)详细介绍
- javascript面向对象包装类Class封装类库剖析
- 详解js中class的多种函数封装方法
- jQuery使用hide方法隐藏指定元素class样式用法实例
- jQuery给多个不同元素添加class样式的方法
- jQuery点击改变class并toggle及toggleClass()方法定义用法
- jquery采用oop模式class类的使用示例
- 深入C++四种强制类型转换的总结
- Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
- C#中实现在32位、64位系统下自动切换不同的SQLite dll文件
- JavaScript更改class和id的方法
- 一篇入门的php Class 文章