您的位置:首页 > 其它

强制类型转换使用时的注意事项

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,我在工

作中的确遇到了这样的问题,所以我需要写出来提醒自己这样的问题

需要注意;

作为一名底层软件工作者,不论在什么时候都不能忽视大小端的问题,尤其设计到强制类型转换的时候。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息