unsigned 和 signed 混合运算总结
2013-10-11 23:10
330 查看
unsigned 和 signed 混合运算总是被问及,我这里总结一下。这里的几个情况:
从这些情况,我们不难得出这样的结论,混合符号且混合位宽的数据之间运算,总是以大数据范围大位宽的量为准,再联想到 1.2情况,发现所有的情况都以大数据范围大位宽数为准。
得出的结论是:unsigned 或 signed 混和运算,以大数据大位宽量为准。
注意:验证的时候,不要用 printf 打印出来的数据为准,请反汇编对比。
1.同等数据宽度,只要出现 unsigned ,皆以unsigned 运算。 2. 同等符号前缀,自动转化为大位宽大数据范围处理,如 unsigned long long 和 unsigned int ,总以 unsigned long long 处理. 3.不同数据宽度且不同数据符号前缀: <1> unsigned short 和 int ,皆转化为 int 。 int a = -2; unsigned short = 1; a / b 等于 -2 ,因为以 int 计算; int a = 2; unsigned short = -1; a / b 等于 0,因为以int 算,unsigned short 转化为 int ,即为 65535,结果自然为0 <2> unsigned int 和 short ,皆为 unsigned int 运算; unsigned int a = +2 / -2; short b = 1 ; a / b 等于 2或者 0xFFFFFFFE,皆以 unsigned int 算; unsigned int a = -2; short b = -1; a / b 等于0 ,分子小于分母 <3> unsigned int 和 long ,皆按照 unsigned long 运算,严格来说是按照unsigned int; unsigned int a = 2; long b = -1 ; a / b 为0 unsigned int a = -2; long b = 1; a / b 为 0xFFFFFFFE <4> unsigned int 和 long long (__int64),皆按照 long long (__int64)处理 <5> unsigned long long 和 int ,皆按照 unsigned long long 处理 <6 - n> .....
从这些情况,我们不难得出这样的结论,混合符号且混合位宽的数据之间运算,总是以大数据范围大位宽的量为准,再联想到 1.2情况,发现所有的情况都以大数据范围大位宽数为准。
得出的结论是:unsigned 或 signed 混和运算,以大数据大位宽量为准。
注意:验证的时候,不要用 printf 打印出来的数据为准,请反汇编对比。
相关文章推荐
- signed和unsigned的比较
- app-release-unsigned.apk is not signed
- 笔试面试中涉及位运算的题目总结(一)
- c混合运算和数据类型转换
- (笔记)不同数据间的混合运算
- 位运算总结
- unsigned与signed区别
- 实现一个正整数加、减、乘、除四则混合运算求值方法
- 20162311 结对编程项目-四则运算 阶段总结
- 20162317-20162315结对编程(四则运算)第一周阶段总结
- signed 与 unsigned 比较大小的默认转换
- 分数对象Fraction创建、转换及混合运算
- js中的运算总结(未完待续
- 位运算 一些总结
- 模运算总结
- PHP常用特殊运算符号和函数总结
- [C关键字]介绍第四弹—— signed、unsigned
- (位运算总结)A summary: how to use bit manipulation to solve problems easily and efficiently
- java高精度、大数运算总结
- 黑马程序员——位运算第三天学习笔记,总结