首先看代码:

#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。。。

												

C语言的unsigned做双目运算符的奇怪问题的更多相关文章

  1. 为什么选择Go语言 GO语言都能做什么产品

    Go语言,又称Golang,是Google开发的一款静态强类型.编译型.并发型,并具有垃圾回收机制的编程语言,它的运行速度非常之快,同时还有如下特性:具有一流的标准库.无继承关系.支持多核:同时它还有 ...

  2. Unity3D研究之多语言用中文做KEY

     做多语言的时候用中文做KEY绝对是有100%的优点,假设用英文表示那么代码里面给文字赋值的地方全都是英文.写的代码多了以后维护起来就没有人能看懂了,或者看起来非常费劲. 对PoolManager ...

  3. 学了 C 语言到底能做什么, 能从事什么工作?

    前言 经常有小伙伴问我,你是做C/C++的,那学C语言可以做什么呢?尤其是还在学校的同学,感觉自己学了很久,什么也做不了,一度怀疑自己是不是不适合程序员这个方向. 开始我都是直接说可以开发嵌入式啊,做 ...

  4. 深入理解C语言-结构体做函数参数

    结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址 结构体定义 struct Man { char name[64]; int age; }; 结构体可以与 ...

  5. C语言中数组做函数参数的问题

    数组做函数参数,会退化成为一个指针变量.因此在进行数组参数传递的同时,需要传递一个数组长度的参数变量. 数组长度可以通过sizeof(arr)/siezof(arr[0])来得到.关于这个sizeof ...

  6. C-基础:C语言为什么不做数组下标越界检查

    //这段代码运行有可能不报错.]; ;i<;i++) { a[i]=i; } 1.为了提高运行效率,不检查数组下表越界,程序就可以跑得快.因为C语言并不是一个快速开发语言,它要求开发人员保证所有 ...

  7. .Net程序员之不学Java做安卓开发:奇怪的Java语法

    1.final关键字:用以修饰类时,表示类不可以被继承,指向基本数据类型或者引用类型时,该类只可以在声明的时候初始化 2.@Override 类似C# 中override关键字,表示对父类的重写.网上 ...

  8. C语言的数据类型

    复习之余,做点笔记<C语言之数据类型> 一.整数数据类型 (1)整数数据类型 整数类型 char 字符型变量   1字节(8Bit) short 短整型      2字节(16Bit) i ...

  9. C语言介绍

    以下东东转自百度百科 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.它由美国贝尔实验室的Dennis M. Ritchie于1972年推出,1978年后,C语言已先后被 ...

随机推荐

  1. GitHub:Alibaba

    ylbtech-GitHub:Alibaba 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. https://github.com/alibaba 2.   ...

  2. DBCP连接池参数解释

    1.<!-- 数据源1 --> 2. <bean id="dataSource" 3. class="org.apache.commons.dbcp.B ...

  3. WPF 键盘全局接收消息

    1.========================================================================== 在c#中怎样禁用鼠标左键的使用,其实我们可以通 ...

  4. ubuntu源与常用python配置pip源(win)、pip常用命令

    pip常用命令 ubuntu更新系统源 首先备份/etc/apt/sources.list mv /etc/apt/sources.list /etc/apt/sources.list.bak 然后下 ...

  5. IDEA的version control log为空,该怎么办?

    问题描述: 解决方案: 关掉IDEA,重新打开,即可药到病除

  6. strip使用

    strip作用:去掉空格.以及想要去掉的字符,实例如下: In [42]: import subprocess In [42]: output=subprocess.check_output([&qu ...

  7. linux中配置双网卡的目的?如何实现双网卡绑定,以实现负载均衡?

    配置双网卡的目的:========================== 1.你想做路由器,网关 2.实现冗余 3.负载均衡     linux 主机安装双网卡,共享一个IP地址,对外提供访问,实际 同 ...

  8. Ubuntu安装deepin wine版QQ

    1.安装deepin wine环境 https://github.com/wszqkzqk/deepin-wine-ubuntu 直接下载zip包(或者用git方式克隆) 使用unzip解压到指定文件 ...

  9. TensorFlow实战第二课(添加神经层)

    莫烦tensorflow实战教学 1.添加神经层 #add_layer() import tensorflow as tf def add_layer(inputs,in_size,out_size, ...

  10. 【Linux开发】linux设备驱动归纳总结(四):4.单处理器下的竞态和并发

    linux设备驱动归纳总结(四):4.单处理器下的竞态和并发 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...