问题描述:

int main()
{unsigned = 1;//无符号signed char y = -1;//有符号if (x > y)printf("x>y\n");elseprintf("y>x\n");system("pause");return 0;
}
int main()
{unsigned int x = 1;//无符号signed char y = -1;//有符号if (x > y)printf("x>y\n");elseprintf("y>x\n");system("pause");return 0;
}
int main()
{unsigned char x = 1;//无符号signed char y = -1;//有符号if (x > y)printf("x>y\n");elseprintf("y>x\n");system("pause");return 0;
}

输出结果分别会是什么

unsigned x = 1;//无符号
signed char y = -1;//有符号
对应结果: x < y;unsigned int x = 1;//无符号
signed char y = -1;//有符号
对应结果: x < y;unsigned char x = 1;//无符号
signed char y = -1;//有符号
对应结果: x > y

分析:
在有符号类型与无符号类型数据进行比较时,vs会警告:有符号/无符号不匹配,但不会报错。
首先vs默认unsigned 类型为unsigned int类型所以结果 1 和 2 相同。

1.unsigned int类型与其他类型如unsigned short,signed short,unsigned char, char 比较时,其他类型一律转化为无符号int类型来比较

unsigned int x = 1;//无符号
signed char y = -1;//有符号
对应结果: x < y;

故signed char发生整型提升:整型提升看自身类型 y = -1 二进制补码为1111 1111
发生整型提升后为11111111 11111111 11111111 11111111 对应类型为unsigned int
故结果为 x<y

2.非int类型比较(不论有无符号)如unsigned short,signed short,unsigned char, char 比较时,一律转化为int类型(有符号的int)来比较

unsigned char x = 1;//无符号
signed char y = -1;//有符号
对应结果: x > y

x整型提升后为00000000 00000000 00000000 00000001(补码)
y整型提升后为111111111 111111111 111111111 111111111 (补码)
对应类型都是 int型
故x>y;

总结:
1.无符号int与有符号int比较大小,转化为无符号int来比较
2.int类型与非无符号int的类型比较时,非无符号int的类型转化为int来比较
3.无符号int类型与其他类型如unsigned short,signed short,unsigned char, char 比较时,其他类型一律转化为无符号int类型来比较
4.非无符号int类型和非int类型如unsigned short,signed short,unsigned char, char 比较时,一律转化为int类型来比较

猪宝宝问题(有符号 无符号类型 整形提升)相关推荐

  1. java 无符号转有符号_java有符号无符号的转换

    数据处理中常常遇到基本数据类型的操作,java都是有符号的数据,而与下位机通信中常常遇到无符号的比如uint8, uint16,uint32等等 1.为了完成这个功能还专门采用ByteBuffer的方 ...

  2. 警告warningC4018有符号/无符号不匹配

    C++警告 warning C4018: "<": 有符号/无符号不匹配 警告代码如下: for (int i = 0; i<matchePoints.size(); ...

  3. 解决警告——有符号 无符号不匹配

    转:https://blog.csdn.net/lxw907304340/article/details/47399207 解决警告--warning C4018: "<": ...

  4. 计算机中符号位正负,负数在计算机中的表示+有符号无符号的区别+负数按位运算...

    部分转载自:https://blog.csdn.net/kebi007/article/details/89741960 一.负数的二进制位表示法 原码:一个整数按照绝对值的大小转换成的二进制数,称为 ...

  5. 负数在计算机中的表示+有符号无符号的区别+负数按位运算

    部分转载自:https://blog.csdn.net/kebi007/article/details/89741960 一.负数的二进制位表示法 原码:一个整数按照绝对值的大小转换成的二进制数,称为 ...

  6. 【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误

    ADDI.ADDIU:加立即数,区别在于是否检测溢出. Format: ADDI rt, rs, immediate To add a constant to a 32-bit integer. If ...

  7. mysql中int长度及有符号无符号

    mysql的int储存的值的长度与设置的int长度无关, 如int(3)表示只能储存3位数字int(11)能存储11位数字.其实这根本就是大错特错. mysql手册是这样写的:MySQL还支持选择在该 ...

  8. java byte 无符号类型_获取java byte的无符号数值

    byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...

  9. c语言中int什么意思以及什么是无符号和有符号整型

    int 是整数类型,用于定义变量的类型,有符号,unsigned int 是无符号的整数类型,直白点说有符号无符号整型就是能不能存放负数. 根据程序编译器的不同,整形定义的字节数不同.51类单片机的C ...

最新文章

  1. java打包要依赖maven库吗_maven-将依赖的 jar包一起打包到项目 jar 包中
  2. Apache服务器错误问题Internal Server Error
  3. 成功解决matplotlib绘图的时候,自定义横坐标和纵坐标刻度数值(调整坐标轴刻度间隔)
  4. 一个具有20位地址和32位字长的存储器_step7编程之地址概念详解
  5. 用html编辑csdn的方法
  6. mysql orderby多个_MySQL OrderBy
  7. apache2 php mysql_二、Linux服务器apache2+PHP7+mysql环境配置
  8. 第十六:Allure-pytest功能特性介绍
  9. ubuntu 16.04 重装失败:进入grub出不来
  10. qtreeview 点击二级节点弹出dialog_2019二级造价师开卷考?一顿操作猛如虎,一看分数59...
  11. 如何下载安全绿色的代理IP软件
  12. 已解决-电脑端HP Scan扫描无反应无法扫描
  13. 【Chatbot】2:中文聊天机器人的实现
  14. 常用的国产计算机软件,国产常用操作系统介绍,亲身使用告诉你答案!
  15. win7计算机相机,笔记本win7怎么拍照_win7电脑照相机如何打开
  16. A6 词根:-vict- = -vinc-;单词:evince、vincible
  17. hive获取数据中位数函数
  18. H265 CTU、CU、PU、TU划分的特点及要求
  19. MySql 查询比其中某一位讲师工资少的教师姓名、工资和职称
  20. 2013年MBA、MPA、MPAcc入学考试综合能力辅导教材

热门文章

  1. 【项目中】Android 小米红米手机无法读取照片图片路径的问题
  2. 支付宝申请支付权限的流程
  3. OSChina 周四乱弹 —— 沙漠皇帝黄金脆皮鸡
  4. 姚舜:47.9%的女性已买房,女人的安全感是房子给的
  5. c#入门经典第8版 pdf百度云_C#入门经典 第6版 高清 电子书 下载 pdf [(美)沃森等著][清华大学出版社] sample...
  6. 东北大学计算机硕士培养方案,东北大学计算机科学与工程学院2018年硕士研究生复试工作实施方案...
  7. 热释电传感器三个引脚_热释电红外传感器控制原理图
  8. 姓范的男孩名字洋气有内涵的
  9. Oracle 11g DataGuard 搭建笔记(Windows Server 2016)
  10. 计算机音乐告白,盘点十首最适合表白歌曲!要告白的赶紧点进来!!