- 代码如下
unsigned short c = 1, d = 3;
int a = c - d;
unsigned short b = c -d;
cout << a << endl;
cout << b << endl;
- 结果是
-2
65534
- 因为在计算的时候,会现将无符号数转化成有符号数计算,所以c-d的结果是-2,在给b赋值的时候,转化成了无符号数,就是65536+(-2)。
c -= d和c--等这些计算方式也会出现这种情况,在判断结果是否小于0等时候出错。
博客讨论了在C++中无符号数和有符号数进行运算时可能出现的问题。当无符号数转换为有符号数进行计算,结果可能变为负数。在赋值回无符号数时,会因为类型转换导致意外的结果,如示例代码所示,c-d的计算结果在赋值给无符号变量b时产生了65534。文章提醒开发者注意这类隐含的类型转换风险,特别是在条件判断和算术运算中。
237

被折叠的 条评论
为什么被折叠?



