-
2017-09-27 12:46:06
以前一直以为C语言中不允许不同数据类型数据的比较大小,今天尝试了一下发现是可以的。
在比较的时候,编译器会先将比较符号两端的数据转化为同一类型,而转化的方式是向数据范围大的转化,比如char和int比较时,char转化为int,而int与float比较时,int转化为float。
更多相关内容 -
不同类型的数据进行比较
2018-08-07 15:48:58作者:朱涛 ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 参考5. Built-in Types中的说明,CPython按照如下规则进行... 相同类型的对象(实例),如果是数字型(int/floa...作者:朱涛
链接:https://www.zhihu.com/question/21435298/answer/18226025
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考5. Built-in Types中的说明,CPython按照如下规则进行比较(自己的总结):
- 任何两个对象都可以比较
- 相同类型的对象(实例),如果是数字型(int/float/long/complex),则按照简单的大小来比较;如果是非数字型,且类(型)中定义了__cmp__(含__gt__,__lt__等)则按照__cmp__来比较,否则按照地址(id)来比较
- 不同类型的对象(实例),如果其中一个比较对象是数字型(int/float/long/complex等),则数字型的对象<其它非数字型的对象;如果两个都是非数字型的对象,则按照类型名的顺序比较,如{} < "abc"(按照"dict" < "str"),而"abc" > [1,2], "abc" < (1,2)。
- 对于自定义的类(型)实例,如果继承自基本类型,则按照基本类型的规则比较(1-3)。否则,old-style class < new-style class, new-style class之间按照类型名顺序比较,old-style class之间按照地址进行比较
- bool类型是int的子类,且True=1, False=0,比较时按照1-4来比较,如True > -1, True < 4.2, True < "abc"等
上面的回答是针对Python2.x,3.x的有较大的变化,如str和int比较时会抛出异常等。
回到题目,字符和数字的比较符合规则3,所以数字<字符。举个例子,如100和'a'(ord('a')=97),有
100<'a' -
八大基本数据类型大小比较
2020-11-12 10:39:541.bit就是位,也叫比特位,是计算机表示数据最小的单位 2.byte就是字节 3.1byte=8bit 。 整型 byte: 1字节 short: 2字节 int: 4字节 long:8字节 浮点型 float:4字节 double:8字节 布尔型 boolean:只有true和... -
C语言中不同类型的运算和比较问题
2020-04-20 21:36:22首先我能获取到一个配置的电压信息,类型是UINT8 然后我要用当前的实际电压与配置的电压进行比较, 问题是 我获取到的配置电压单位是0.1V,当前实际电压单位是0.01V 所以工需要将我获取到的配置电压 乘以 10,再和...今天写代码的时候遇到这样一种情况:
首先我能获取到一个配置的电压信息,类型是UINT8
然后我要用当前的实际电压与配置的电压进行比较,
问题是 我获取到的配置电压单位是0.1V,当前实际电压单位是0.01V
所以工需要将我获取到的配置电压 乘以 10,再和实际电压进行比较,
我是这样写的:if(CurrentV < (ConfigV * 10))/* ConfigV :配置电压 CurrentV :实际电压 */ { ... }
那么问题就来了,我的ConfigV 的类型是UINT8,随随便便给它做了*10的操作,会不会溢出呢?
不知道。
实际写代码测试了一下,代码如下:int main(void) { unsigned char a = 222; unsigned short b = 0; b = a * 10; printf("b:%d\r\n", b); if(b > a * 10) { printf("b > a * 10; overflow!!\r\n"); } else { printf("b <= a * 10; \r\n"); } return 0; }
结果如下:
所以这能证明真的没有问题吗?感觉并不能
好吧,去找书,看看C语言的祖宗书里《The C Programming Language》有没有相关的问题描述果然没让人失望,还真有,书里面是这样描述的:
总结一下,如果有两个不同类型的数据需要进行运算时,会进行类型提升,
原则是从低往高转, unsigned优先。又问了大佬,大佬发给我这样一段描述:
因此,从C语言的规则里来看,我上面那样写代码应该是没有问题的,
因为操作符左右两端的数据都被转换成了 unsigned int 类型了,所以没问题。
但是大佬又说,如果这么写都要先确认编译器完全按照规则写了,
有些编译器实际上会存在不满足全部C特性的问题。
如遭重击。。。
所以这个故事告诉我们,有这种情况还是自己强转一下类型吧,否则出错哭都不知道找谁哭。。。
有符号数和无符号数的比较
例子1:
int a = -1; unsigned int b = 1; if(a > b) { printf("a > b, a = %d, b = %u\n", a, b); } else { printf("a <= b, a = %d, b = %u\n", a, b); }
输出结果为:a > b, a = -1, b = 1
当执行一个运算时(如这里的a>b),如果它的一个运算数是有符号的而另一个数是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号数,并假设这两个数都是非负的,来执行这个运算。
例子2:
int i = -12; unsigned int j = 6; //i+j 的值是多少? printf("%u.\r\n",( ui+i ) ); // 无符号数解析:4294967290 printf("%d.\r\n",( ui+i ) ); // 有符号数解析:-6
有符号数和无符号数相加时,有符号数的类型被提升到无符号数,最高位符号位变成数据位。
例子3:
int i = -20; unsigned int j = 10; int k = 5; if((i+j) > k) { printf("i+j:%u.unsigned.\r\n", i+j); } else { printf("i+j:%d.signed.\r\n", i+j); }
输出结果为:i+j:4294967286.unsigned.
例子4:
int i = -20; unsigned int j = 10; int k = -5;//此处和上面不同 if((i+j) > k) { printf("i+j:%u.unsigned.\r\n", i+j); } else { printf("i+j:%d.signed.\r\n", i+j); }
输出结果为:i+j:-6.signed.
-
Gson同字段不同类型数据解析总结
2019-06-17 13:56:02前言 最近使用Retrofit进行网络请求时,自带Gson解析json时遇到一个问题,返回的json数据中某个字段可能为...如果返回的数据类型有两种以上,但你定义json的实体类bean属性类型时,可能只使用了jsonObject或者json... -
Hive SQL中不同数据类型比较时隐性转换的坑
2019-07-11 16:57:30不同数据类型比较 先来看一段SQL。表dean_test中字段a的类型是整型INT,字段b的类型是字符串/字符型STRING/VARCHAR。 select * from dean_test where a = b 这就是不同数据类型比较。 现实中发现不少数据类型不匹配... -
equals比较两个不同类型的数据值是否相等
2019-09-16 22:21:21在作Integer与100的值比较的时候,异想天开地写成了 Integer i = 100; "100".equals(i) 结果得到的值为false。... //注意这边是对象Long,不是基本数据类型 Long l1 = 156622862025019l; Long l2 = 1... -
Long类型数据比较
2018-08-07 16:19:18之所以记录是因为在开发过程当中,碰到了两次因为个人原因Long类型判断出错导致的bug,因此在此关于Long类型数据比较做一个记录。 注意:long类型和Long类型是不一样,long类型属于基本的数据类型,而Long是long... -
js 中的不同的数据类型之间作比较时的“隐式转换规则”
2021-10-01 16:33:40一、js 隐式转换规则 1. javascript 隐式转换规则 隐式类型转换是在一定场景下...两个数据比较时,如果两边数据不是同种类型的话,按以下规则进行相应的隐式类型类型转换 对象 --> 字符串 --> 数值 布尔值 --&g -
C语言中不同类型数据之间的赋值
2017-06-14 11:06:38一、长度相等(在内存中存储的位数相等)的两个不同的类型的数据之间的赋值 在计算机中的存储内容不变,只是数据按照不同的编码格式来解析。二、长 赋值给 短 (短 = 长) 截取低位,然后按照短整数的数据类型解析。... -
一个char类型数据和一个String类型数据比较
2019-04-03 22:38:41一个char类型数据和一个String类型数据比较 初学编程,模糊查询代码编写过程中遇见一个小问题---------如何对一个char类型数据和一个String类型数据比较,经过简单测试解决了,记录一下自己的学习过程,可能方法比较... -
Java基本数据类型的比较
2018-03-27 18:51:46可以比较基本数据类型 , 也可以比较引用数据类型 equals: 只能比较引用数据类型, 默认比较的是地址值*(string类中重写了eqals方法),如果我们想建立自己的比较方式, 需要重写equals方法通过对比字符串比较来理解,... -
两年数据对比柱形图_呕心整理4大类12个图表类型,轻松搞定数据可视化
2020-11-16 18:11:42因为很多人并不知道该如何从那么多类型的图表中,选择最适合的一种来表达数据。今天,我会为大家分享4大类型共12种图表,并解释它们适合使用的场景以供大家参考。本篇适合收藏起来,需要的时候找出来看一遍。数据报.... -
两个float 类型数据比较大小
2019-12-11 14:47:46float类型不能比较相等或不等,但可以比较>,<,>=,<= 用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数... -
JS数据类型之基本数据类型
2019-06-28 16:46:431.JavaScript(以下简称js)的数据类型分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型); 2.js常用的基本数据类型包括undefined、null、number、boolean、string; 3.js的引用数据类型也就是... -
MySQL数据类型
2021-01-19 01:23:09一、整型的显示宽度MySQL数据类型与SQLServer有些不同,其定义的基本形式如下:整型类型(显示宽度)注意,正确的理解,其实是显示宽度,因为整型的显示宽度,对数值大小无影响,只是当设置了zerofill的时候,在显示的... -
C语言的数据类型:基本数据类型,构造数据类型,指针类型,空类型
2019-11-01 10:05:34一 数据类型 基本数据类型:byte,int ,char, float, double, enum 构造数据类型:数组,结构体,共用体 指针类型 :指针 空类型 : void 二 基本数据类型的特点 不可以再分解为其他类型,基本类型就是自我说明。 三 ... -
对象实例数据和对象类型数据
2019-07-30 16:32:29对象类型:对象中各个实例字段的数据 对象类型数据:对象的类型、父类、实现的接口、方法等 -
ClickHouse常用数据类型与其他组件类型对比
2020-06-28 16:40:52与其他组件数据类型对比 MySQL Hive ClickHouse byte TINYINT Int8 short SMALLINT Int16 int INT Int32 long BIGINT Int64 varchar STRING String timestamp TIMESTAMP DateTime float FLOAT ... -
基本数据类型和封装类型的区别
2019-09-23 13:27:34基本数据类型和封装类型的区别基本数据类型基本数据类型介绍封装数据类型基本数据类型对应的封装类介绍基本数据类型与封装类对应关系对照表String类他们的区别总结合理的创建标题,有助于目录的生成如何改变文本的... -
JS数据类型之引用数据类型
2019-06-28 16:46:511、引用数据类型也就是对象数据类型object,比如:object、array、function、data等; 2、引用类型的值可以改变: let person = {name: 'lisa'} person.name = 'Jane' // 通过修改对象属性值更改对象 console.... -
MySQL与Oracle数据类型对比
2018-11-07 17:18:01MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据类型的对应关系。 一、常见数据... -
C语言中基本的数据类型有哪些
2021-05-19 13:45:07C语言中基本的数据类型有哪些发布时间:2020-11-26 15:10:13来源:亿速云阅读:76作者:Leah本篇文章给大家分享的是有关C语言中基本的数据类型有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇... -
mysql数据库中列数据类型与java基本数据类型对比
2018-07-26 10:23:58事情是这样的,作为一个小白,我刚学完java又来学数据库,发现两种的数据类型很相似但是又不完全一样。他们有什么区别呢?所以我今天就专门来搞一搞这个数据类型这一块。俗话说得好不怕不识货,就怕货比货,咱就来比... -
数据可视化——图表类型选择
2021-01-03 22:00:43数据可视化图表类型选择,需要从已有数据出发,考虑自己有什么数据,想要用数据图表做什么,也就是图表的功能。然后要考虑图表对使用者的理解能力要求,也就是可理解性。 图表的功能性总结 可视化图表所具有的功能... -
java常用数据类型比较大小
2018-02-03 17:03:57java个数据类型比较大小 -
C++模板实现两个不同类型的数据相加函数
2019-02-24 22:41:471、最简单的情况: template<class T>...缺点是不能够处理不同类型的数据,例如Add(100, 100.0f); 2、第二种情况: template<typename T1, typename T2> T1... -
Pandas简明教程(一):Series数据类型、DataFrame数据类型
2021-04-14 20:38:15Pandas是基于NumPy构建的数据分析包,但它含有比ndarray更为高级的数据结构和操作工具,如Series类型、DataFrame类型等。 Pandas的便捷功能离不开高效的底层数据结构的支持。 Pandas主要有三种数据结构: Series... -
JS中不同类型作比较的规律 (比较运算符)
2018-12-12 14:40:25JS 不同数据类型的比较 是个头疼事情,那有没有规律可循,让记忆和理解起来更加容易呢, console.log(1 == "1") //true 好的,我先把规则告诉大家,然后大家理解后再开始练习。看看效果是不是很显著... -
Java 数据类型及其判断
2021-03-05 17:34:31基本数据类型,也称原始数据类型:byte、short、char、int、long、float、double、boolean它们之间的比较,应该用双等号(==)比较的是它们的值。2.引用数据类型:JAVA当中所有的类都是继承于Object这个基类的,在...