猪宝宝问题(有符号 无符号类型 整形提升)
问题描述:
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类型来比较
猪宝宝问题(有符号 无符号类型 整形提升)相关推荐
- java 无符号转有符号_java有符号无符号的转换
数据处理中常常遇到基本数据类型的操作,java都是有符号的数据,而与下位机通信中常常遇到无符号的比如uint8, uint16,uint32等等 1.为了完成这个功能还专门采用ByteBuffer的方 ...
- 警告warningC4018有符号/无符号不匹配
C++警告 warning C4018: "<": 有符号/无符号不匹配 警告代码如下: for (int i = 0; i<matchePoints.size(); ...
- 解决警告——有符号 无符号不匹配
转:https://blog.csdn.net/lxw907304340/article/details/47399207 解决警告--warning C4018: "<": ...
- 计算机中符号位正负,负数在计算机中的表示+有符号无符号的区别+负数按位运算...
部分转载自:https://blog.csdn.net/kebi007/article/details/89741960 一.负数的二进制位表示法 原码:一个整数按照绝对值的大小转换成的二进制数,称为 ...
- 负数在计算机中的表示+有符号无符号的区别+负数按位运算
部分转载自:https://blog.csdn.net/kebi007/article/details/89741960 一.负数的二进制位表示法 原码:一个整数按照绝对值的大小转换成的二进制数,称为 ...
- 【MIPS汇编】ADDI,ADDIU,ADD,ADDU的区别、有符号无符号的谬误
ADDI.ADDIU:加立即数,区别在于是否检测溢出. Format: ADDI rt, rs, immediate To add a constant to a 32-bit integer. If ...
- mysql中int长度及有符号无符号
mysql的int储存的值的长度与设置的int长度无关, 如int(3)表示只能储存3位数字int(11)能存储11位数字.其实这根本就是大错特错. mysql手册是这样写的:MySQL还支持选择在该 ...
- java byte 无符号类型_获取java byte的无符号数值
byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...
- c语言中int什么意思以及什么是无符号和有符号整型
int 是整数类型,用于定义变量的类型,有符号,unsigned int 是无符号的整数类型,直白点说有符号无符号整型就是能不能存放负数. 根据程序编译器的不同,整形定义的字节数不同.51类单片机的C ...
最新文章
- java打包要依赖maven库吗_maven-将依赖的 jar包一起打包到项目 jar 包中
- Apache服务器错误问题Internal Server Error
- 成功解决matplotlib绘图的时候,自定义横坐标和纵坐标刻度数值(调整坐标轴刻度间隔)
- 一个具有20位地址和32位字长的存储器_step7编程之地址概念详解
- 用html编辑csdn的方法
- mysql orderby多个_MySQL OrderBy
- apache2 php mysql_二、Linux服务器apache2+PHP7+mysql环境配置
- 第十六:Allure-pytest功能特性介绍
- ubuntu 16.04 重装失败:进入grub出不来
- qtreeview 点击二级节点弹出dialog_2019二级造价师开卷考?一顿操作猛如虎,一看分数59...
- 如何下载安全绿色的代理IP软件
- 已解决-电脑端HP Scan扫描无反应无法扫描
- 【Chatbot】2:中文聊天机器人的实现
- 常用的国产计算机软件,国产常用操作系统介绍,亲身使用告诉你答案!
- win7计算机相机,笔记本win7怎么拍照_win7电脑照相机如何打开
- A6 词根:-vict- = -vinc-;单词:evince、vincible
- hive获取数据中位数函数
- H265 CTU、CU、PU、TU划分的特点及要求
- MySql 查询比其中某一位讲师工资少的教师姓名、工资和职称
- 2013年MBA、MPA、MPAcc入学考试综合能力辅导教材
热门文章
- 【项目中】Android 小米红米手机无法读取照片图片路径的问题
- 支付宝申请支付权限的流程
- OSChina 周四乱弹 —— 沙漠皇帝黄金脆皮鸡
- 姚舜:47.9%的女性已买房,女人的安全感是房子给的
- c#入门经典第8版 pdf百度云_C#入门经典 第6版 高清 电子书 下载 pdf [(美)沃森等著][清华大学出版社] sample...
- 东北大学计算机硕士培养方案,东北大学计算机科学与工程学院2018年硕士研究生复试工作实施方案...
- 热释电传感器三个引脚_热释电红外传感器控制原理图
- 姓范的男孩名字洋气有内涵的
- Oracle 11g DataGuard 搭建笔记(Windows Server 2016)
- 计算机音乐告白,盘点十首最适合表白歌曲!要告白的赶紧点进来!!