读书人

关于C有无符号数之间转换有关问题。

发布时间: 2012-09-18 16:21:42 作者: rapoo

关于C有无符号数之间转换问题。。。
老鸟在上 受小弟一拜。。。

最近做一个项目,用的是海思gcc 项目最后头决定要去warning 设计到很多有无符号数之间强制类型转换的。。 当时转换的时候很忙 就没怎么看 最后warning去完了 设备也挂了。。。直接段错误 看core 看堆栈 也没什么有效信息 郁闷了!

上面废话说多的 小弟就是想请教下 在有符号数和无符号数之间转化 会有多大的风险 应为涉及到很多第三方API 比如在一个地址 unsigned int addr 和一个长度 signed int len 之间做运算 编译器会报warning 但是如果把一方强转 会不会出现溢出或者数的大小改变了这种错误。。
其实转换方法结果我都了解 但是到了具体项目就不好把控了
还跪请有过这方面经验的大鸟解答下 将近一个G的代码 我用beyond compare查的头都大了 头明天过项目还等着结果呢。。。

[解决办法]
把unsigned转变为signed的话,内存数据不变,这样有可能出现溢出。
[解决办法]
正常数据的话,没问题~~
比如unsigned int addr 是 64 signed int len=32
不会对数据有任何影响,强制转换,也不会有影响。。

即使len是负数比如-5,单纯的addr*len,乘法的结果在内存里和被强制转化之后是完全一样的,没任何影响的。。

什么时候有影响:
addr*len/2 会有影响。。。
例如addr是6 len是-5 你期望的结果应该是-60,但很可惜不是。。
如果把addr强制转成signed int 的话 才能出现-60这个结果

读书人网 >C语言

热点推荐