首先看代码:

#include <stdio.h>

void main()
{
int num1 = ;
unsigned int num2 = ;
if (num1 - num2 > )
{
printf("%d-%d=%d,大于0", num1, num2, num1 - num2);
}
else
{
printf("%d-%d=%d,小于0", num1, num2, num1 - num2);
}
}

以为会输出这个结果:

1-2=-1,小于0

错了。。运行结果如下

1-2=-1,大于0

再看C#的的运算结果

 static void Main(string[] args)
{
int num1 = ;
uint num2 = ;
if (num1 - num2 > )
{
WriteLine($"num1-num2={num1 - num2},大于0");
}
else
{
WriteLine($"num1-num2={num1 - num2},小于0");
}
Console.ReadKey();
}

输出结果:

num1-num2=-1,小于0

C#的运算结果与期待结果一致。

原来C语言在做两个数加减的时候,是按照其中一个更严格的数据类型来计算的。所以当int和unsigned int运算的时候,会转换为unsigned int来运算。

printf("%d-%d=%d,大于0", num1, num2, num1 - num2);
//将上面的的代码修改为
printf("%d-%d=%u,大于0", num1, num2, num1 - num2);

得到输出结果:

1-2=4294967295,大于0

4294967295太大了不方便分析,我们将它转换为16进制:FFFFFFFF,刚好是-1的补码。。

所以if语句中的num1-num2,得出来的是num1-num2的补码也就是FFFFFFFF,满足大于0。。。

												

最新文章

  1. Codeforces Round #234A
  2. NGUI 滑动与点击事件冲突处理
  3. 【题解】【区间】【二分查找】【Leetcode】Insert Interval &amp; Merge Intervals
  4. [复变函数]第06堂课 2.1 解析函数的概念与 Cauchy-Riemann 方程 (续)
  5. hdu 六度分离 floyd
  6. C 再识数组指针 指针数组的概念
  7. wireshark使用心得
  8. python注意事项
  9. 《Python 数据库 GUI CGI编程》
  10. 【相关网站 - 01】- Java 相关网站
  11. Filter需要配置多个url-pattern
  12. spring载入外部配置文件的方法
  13. python通过get,post方式发送http请求和接收http响应的方法,pythonget
  14. mysql学习【第4篇】:MySQL函数和编程
  15. .net连mysql数据库汇总
  16. java基础-System类常用方法介绍
  17. wp中的位图
  18. 【C#】【MySQL】C# 查询数据库语句@Row:=@Row+1以及执行存储过程失败解决方案
  19. 总结js(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
  20. oracle错误一览表

热门文章

  1. 代码实现:键盘录入一个int类型的整数,对其求二进制表现形式
  2. WCF绑定(Binding)
  3. nodejs相关
  4. LoadRunner 技巧之协议分析
  5. Ubuntu16.04系统Tensorflow源码安装
  6. Python爬虫学习==&gt;第十二章:使用 Selenium 模拟浏览器抓取淘宝商品美食信息
  7. win10相机打不开,显示错误代码0xA00F4246(0x800706D9)
  8. 统计学习方法 | 第1章 统计学习方法概论 | Scipy中的Leastsq()
  9. [python] 正则表达式细节
  10. 1. centos7 的安装