一、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. c# 使用线程方式实现消息订阅
  2. 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_t
  3. runtime objc_msgSend
  4. 学python还是php2019_有2019年开始学PHP的人吗,可不可以分享一下你是如何考虑的?...
  5. 关于python中带下划线的变量和函数 的意义
  6. python商品管理系统_基于django的奶茶店的管理系统
  7. 利用Python进行数据分析--绘图和可视化
  8. 【风电功率预测】基于matlab灰狼算法优化LSTM风电功率预测【含Matlab源码 1392期】
  9. 在网页输入框输入角标_这个免费插件能帮我们把Excel内容快速填充到网页表单?...
  10. 开发APP需要什么技术?
  11. Windows环境下修改IP的bat文件
  12. java运行无法加载主类_java运行显示“找不到或无法加载主类”的解决办法(linux)...
  13. AtCoder Beginner Contest 240 D
  14. Spring中的依赖注入(10级学员 韩晓爽课堂总结)
  15. 苹果延长13英寸MacBook Pro背光维修计划
  16. 圆角矩形不是圆:圆角的画法和二阶连续性
  17. Dubbo官网实战使用技巧
  18. Git使用简介一(入门级)
  19. Python3 Django的补充
  20. html鼠标悬停图片释义文字消失,鼠标悬停,在图片上显示文字~

热门文章

  1. Mac OS X在终端中打开文件夹窗口
  2. 查看Linux的核数和内存等相关系统配置
  3. 知乎网页版免登录浏览
  4. win10右击无法新建文件,只能新建文件夹和快捷方式
  5. HashMap、ConcurrentHashMap源码解读(JDK7/8)
  6. WiFi出现间歇性断网时,应该如何解决!
  7. 腾讯QQ的验证码,很黄很暴力
  8. 2012-11-21四六级词汇#9312;-----…
  9. linux中负载值为多少正常_linux查看系统负载常用指标与命令
  10. 一位资深HR的职场感言