C语言中的整数自动转换原则

转载 2007年09月16日 15:19:00

有符号数与无符号数之间运算问题
以下实验均在virual c++6中运行通过
这个问题测试是否懂得C语言中的整数自动转换原则,有些开发者懂得极少这些东西。当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
首先进行一个实验,分别定义一个signed int型数据和unsigned int型数据,然后进行大小比较:
    unsigned int a=20;
    signed int b=-130;
a>b?还是b>a?实验证明b>a,也就是说-130>20,为什么会出现这样的结果呢?
这是因为在C语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理,因此a=20,b=4294967166,这样比较下去当然b>a了。
再举一个例子:
 unsigned int a=20;
 signed int b=-130;
 std::cout<<a+b<<std::endl;
结果输出为4294967186,同样的道理,在运算之前,a=20,b被转化为4294967166,所以a+b=4294967186

减法和乘法的运算结果类似。

如果作为signed int型数据的b=-130,b与立即数之间操作时不影响b的类型,运算结果仍然为signed int型:
signed int b=-130;
std::cout<<b+30<<std::endl;
输出为-100。

而对于浮点数来说,浮点数(float,double)实际上都是有符号数,unsigned 和signed前缀不能加在float和double之上,当然就不存在有符号数根无符号数之间转化的问题了。

 

C语言运算中的数据类型自动转换原则

1、隐式转换     C在以下四种情况下会进行隐式转换:        1、算术运算式中,低类型能够转换为高类型。        2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给...
  • cherish_2012
  • cherish_2012
  • 2014年03月14日 17:19
  • 24147

C语言运算中的数据类型自动转换原则

1、隐式转换     C在以下四种情况下会进行隐式转换:        1、算术运算式中,低类型能够转换为高类型。        2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给...
  • cherish_2012
  • cherish_2012
  • 2014年03月14日 17:19
  • 24147

C语言基本数据类型及转换规则

C语言的基本数据类型;有点奇怪的是为什么float和double不用signed/unsigned修饰。 符号属性 长度属性 基本型 所占位数 取值范围 输入符举例 输...
  • Since20140504
  • Since20140504
  • 2014年05月08日 16:04
  • 2362

C/C++ 类型自动转换规则

1、隐式转换    C在以下四种情况下会进行隐式转换:       1、算术运算式中,低类型能够转换为高类型。       2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。 ...
  • DannyYo_SCAU
  • DannyYo_SCAU
  • 2015年04月19日 12:29
  • 811

C语言中数据类型之间怎样进行强制转换?

C语言是编程语言的根本,所以很多高校都为计算机专业的学生开设了C语言课程。数据类型是学习C语言的根本,今天,我就给大家介绍一下C语言中各数据类型之间的强制转换。   在讲数据类型强制转换之前,我先讲...
  • bentengdehe
  • bentengdehe
  • 2016年05月05日 17:21
  • 4251

C语言中的整数(short,int,long)

整数是编程中常用的一种数据,C语言中有三种整数类型,分别为 short、int 和 long。int 称为整型,short 称为短整型,long 称为长整型,它们的长度(所占字节数)关系为: s...
  • pingdouble
  • pingdouble
  • 2016年03月08日 13:24
  • 3510

C语言 - 什么是数据类型?数据类型的本质

C语言中提供了许多的数据类型,如下图所示:C语言为什么要引入这么多的数据类型呢?因为C语言归根结底只是一门编程语言,一种让计算机为我们做事情的工具。引入这么多的数据类型是为了更加方便的表现现实世界中事...
  • u014622185
  • u014622185
  • 2015年11月04日 16:57
  • 3060

C语言类型转换详解

前言:C语言的类型转换是很多初学者的难点,但也是语言的重点。在此,介绍一下C语言类型转换的知识。注意本文是以gcc编译器为基准。 一、            变量 1、 基本类型变量 说到基本类...
  • zhangzhi123456789
  • zhangzhi123456789
  • 2015年11月02日 17:07
  • 4528

c语言-数据类型-构造类型

利用计算机存处理单一的数据是比较容易,比如一个人的某一科成绩,直接创建一个变量存储相应的分数就可以了,但是要同时处理多个科目的时候,这时候就有点麻烦了,同时创建多个变量存储多个科目这样子显得有点奇怪不...
  • OnionOmelette
  • OnionOmelette
  • 2015年02月04日 18:47
  • 3494

C语言中的整数自动转换原则

1、隐式转换     C在以下四种情况下会进行隐式转换:        1、算术运算式中,低类型能够转换为高类型。        2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给...
  • qq_33921804
  • qq_33921804
  • 2016年02月04日 00:20
  • 285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中的整数自动转换原则
举报原因:
原因补充:

(最多只允许输入30个字)