一、C语言的int类型与unsigned int运算的问题
1、signed int 可以简写成int ,unsigned int 一般不做简写。

2、在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下:
(1)转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。
(2)所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。
(3)char 和 short 参与运算时,必须先转换成 int 类型。
下图对这种转换规则进行了更加形象地描述:

例子

int  main()
{int a = 3;unsigned int b = -6; printf("%d\n", a+b);if((a+b)>0){printf("yes\n");}else{printf("no\n");}return 0;
}

运行结果:
-3
yes
看到这个运行结果,很多小伙伴开始疑惑了?unsigned int类型怎么可以赋值一个-6?既然打印出来结果是-3<0,为什么还打印出来是yes?有这些问题的小伙伴且听我娓娓道来。
(1)必须知道的是:
①int类型和unsigned int类型的差别。unsigned int类型比int类型的容量大是因为,unsigned int是无符号类型的,所以最高位不表示正负,而int类型的最高位是表示正负的,1表示负数,0表示正数。

②在计算机中,负数存储的方式都是以其其补码形式储存。

例如:6在计算机的存储形式是0000 0000 0000 0110(32位计算机中),而-6是1000 0000 0000 0110 (32位机下)(最高位是符号位,这里为1,表示负数),补码也就是1111 1111 1111 1010(32位计算机中),补码=原码取反+1。

③赋值一个负数给unsigned int类型的变量,它的意思就是将-6这个数的补码形式(1111 1111 1111 1010(32位机下))形式存到一个叫b的空间中,下次我读取这个数的时候,是使用b这个名字,按照b这个名字的类型来读取的,所以当b是unsigned int类型的时候,就不考虑最高位是符号位,则b = 1111 1111 1111 1010(32位机下)(因为是无符号),当b是int类型的时候,考虑最高位是符号位(1为负数,0为正数),当发现是1的时候也就是负数的时候,计算机会把它转换成为原码从而读出是-6。所以一个变量的类型是决定读取这个变量存储的数的方式。

④自动类型转换。当unsigned int类型与int类型运算时,如果没有指出转换的类型,它会进行“隐式转换”转换为unsigned int类型,也可以记住,不同类型进行运算时,没指出转换的类型时,它会往容量大的那总类型转换,因为这样可以更加容易避免溢出嘛。

(2)代码分析:重中之重,本文重点
首先,定义了一个 int a = 3 。a的存储以3的二进制形式存储。 unsigned int b = -6 。b的存储是以其补码存储的,也就是1111 1111 1111 1010(32位机下)。当执行a+b的时候,printf函数要求指定打印出%d,所以,a以int(%d)类型读取出来,也就是3;b也是以int(%d)类型读取出来,也就是-6,所以3+(-6)=-3,发现打印结果是-3。

重点:
而在后面的 if((a+b)>0) 判断中,(a+b)中并没有指定读取的类型,所以就进行隐式转换,a就转成unsigned int类型,也就是3;b转成unsigned int类型,因为b本来的存储是1111 1111 1111 1010(32位机下),转成unsigned int类型时不考虑符号位,所以就直接以补码的形式转化,也就是65530(32位机下),所以a+b=65533>0,输出yes。

c语言signed int与unsigned int的运算相关推荐

  1. c语言unsigned int 范围,unsigned int 32比特数据范围为-2147

    提到unsigned,大家应该都了解,有朋友问c语言中unsigned什么意思,还有人想问c语言中的unsigned是什么意思,这到底是咋回事?事实上unsigned呢,下面是小编推荐给大家的unsi ...

  2. int、unsigned int、float、double 和 char 在内存中存储方式

    2017-12-28 创建人:Ruo_Xiao 实验环境:vs2010.Intel 邮箱:xclsoftware@163.com 2018-01-16 修改人:Ruo_Xiao添加对移位存储的说明. ...

  3. 循环变量到底应该使用int还是unsigned int?

    通常循环变量在循环中会充当数组下标,所以为了保证不出线向下越界,直觉上我们会选择使用unsigned int类型的循环变量. 但在运行下面这段代码的时候,问题出现了. template <cla ...

  4. 解决error: inlining failed in call to always_inline ‘int _mm_popcnt_u32(unsigned int)’

    在编译_mm_popcnt_u32函数时遇到如下错误: error: inlining failed in call to always_inline 'int _mm_popcnt_u32(unsi ...

  5. 编写函数unsigned int reverse_bit(unsigned int value),实现无符号二进制整数在32位机器上的bit位翻转

    编写函数unsigned int reverse_bit(unsigned int value),实现无符号二进制整数在32位机器上的bit位翻转 如: 在32位机器上25这个值包含下列各位: 000 ...

  6. 蓝桥杯扫盲之int, char, unsigned int, unsigned char的使用

    一.C51常用数据类型 C语言中默认规则:short int 即为int,long int 即为 long,前面若无unsigned符号默认signed型. 0和1每一个所占空间是一位(b),也是单片 ...

  7. c++ 中关于int,unsigned int , short的关系与应用

    int类型比较特殊,具体的字节数同机器字长和编译器有关.如果要保证移植性,尽量用__int16 __int32 __int64吧 __int16.__int32这种数据类型在所有平台下都分配相同的字节 ...

  8. size_t是什么数据类型?为什么要用size_t替代int、unsigned int、unsigned long、unsigned long long

    今天看RXW源码的时候,发现有个代码把for循环的节点定义为size_t类型,我想这个循环才几次啊,你就用size_t,逼装的不错哦!,,那么size_t究竟是嘎哈用的呢?让我们来看看! 别看了,破案 ...

  9. C语言-附加-按位翻转一个unsigned int 类型的数字

    示例如下 0x00111111 --> 0x88888800 ===> 0b0001 0001 0001 0001 0001 0001 0001 0001 //0x11111111 转换后 ...

最新文章

  1. prometheus连续查询_Prometheus查询
  2. Sqoop在导入MySQL数据时遇到Timestamp列为0000-00-00 00:00:00报错
  3. 鸿蒙杀戮手机电脑版,鸿蒙杀戮单职业最新版
  4. 关于启明星辰IDS无法CONSOLE连接
  5. Apache Camel 2.9发布–十大变化
  6. python 字符串大小写转换 其它不变_python字符串大小写如何转换
  7. 程序设计导引及在线实践_学院经纬计算学院程序设计基础与实验入选首批国家级一流本科课程...
  8. 阿里巴巴组织能力建设(政委机制、绩效管理、人才发展等).pdf(附下载链接)...
  9. 使用Nmap扫描目标主机
  10. python numpy的shape函数
  11. 关于zblog模板当中标签、相关文章调用应该怎么来写
  12. KALI 2020.4 搭建双网卡渗透环境
  13. 用LINQ结合CAML查询 Sharepoint 数据库内容
  14. Linux系统设置三台静态IP,设置网卡,连接Xshell配置映射及免密
  15. 应届生应聘java需要掌握的技能
  16. PL/SQL Developer实现双击table表名查询
  17. 电脑鸿蒙系统怎么连接无线网,电脑新装了系统,连接不上WiFi,怎么处理?
  18. 度量衡---英文单词
  19. Sklearn的KMeans的详解
  20. Python编写学籍管理系统

热门文章

  1. 计算机网络论文作业,论文作业-计算机网络.doc
  2. USRP硬件平台介绍
  3. Win10家庭版远程桌面工具RDP Wrapper出现Not listening解决方案
  4. 动画特效十四:手风琴效果
  5. 微软sql服务器可以关闭吗,停止Microsoft SQL server的几种方式
  6. nginx安装配置记录
  7. React 不用eject下修改webpack配置实现alisa
  8. Faiss(16):编译时添加对AVX512指令的支持
  9. 【BUG】org.json.JSONException: A JSONObject text must begin with ‘{‘ at character 1 of {
  10. 实习日志03-技术02