您的位置:首页 > 其它

unsigned 和 signed 混合运算总结

2013-10-11 23:10 330 查看
unsigned 和 signed 混合运算总是被问及,我这里总结一下。这里的几个情况:

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 打印出来的数据为准,请反汇编对比。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: