类型转换

3.4自动类型转换与强制转换运算符

倾然丶 夕夏残阳落幕 提交于 2020-03-08 10:53:05
3.4.1表达式中的自动类型转换 C编译器在对操作数进行运算之前将所有的操作数都转换成范围较大的操作数类型,称为类型的提升。 3.4.2赋值中的自动类型转换 /*若赋值运算符左侧变量类型和右侧变量类型不一致,将右侧表达式的值转换成左侧变量的类型*/ # include <stdio.h> int main ( ) { int n = 256 ; float f = 3.6 ; double d = 2.5 ; n = f ; f = n ; d = f ; printf ( "n=%d\n" , n ) ; printf ( "f=%f\n" , f ) ; printf ( "d=%f\n" , d ) ; } 输出: n = 3 f = 3.000000 d = 3.000000 3.4.3强制类型转换运算符 /*(类型)表达式*/ # include <stdio.h> int main ( ) { int m = 5 ; printf ( "m/2=%d\n" , m / 2 ) ; printf ( "(float)(m/2)=%f\n" , ( float ) ( m / 2 ) ) ; printf ( "(float)m/2=%f\n" , ( float ) m / 2 ) ; printf ( "m=%d\n" , m ) ; } 输出: m / 2 = 2 (

八种基本数据类型(java)

試著忘記壹切 提交于 2020-03-08 05:59:30
基础准备:   8种基本数据类型包括4种整型,2种浮点型,1个字符型,1个布尔型   暂且称呼为:(4211)   4种整型: byte  short  int  long   2种浮点型:float  double   1种字符型:char   1种布尔型:boolean 详细分析:   基本数据类型和引用数据类型的区别:        基本数据类型 是JAVA程序里已经定义好的规则, 引用类型 是程序员在程序编写时定义的,一般只在程序员写的某个程序里有意义。    Java中如何强制类型转换?     通常有两类类型转换规则:        自动类型转换(自动),较小的类型转换为一个更大的类型          byte - > short - > char - > int - > long - > float - > double        强制类型转换(手动),更大的类型转换到一个较小的类型          double - > float - > long - > int - > char - > short - > byte     为什么要强制类型转换:        因为java是强制类型语言,程序在运行到不同数据类型的时,需要转变类型才能正常运行.      什么情况下使用强制类型转换:         程序遇到大单位转换小单位;       int——

JAVA基本包装类

一世执手 提交于 2020-03-07 10:48:07
JAVA的包装类 一、Java是一门面向对象的语言,但是在Java中设计了8种的基本数据类型却不是面向对象的,这在实际使用中十分的不方便,为了弥补掉这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样的八个基本数据类型对应的类称为包装类。 基本数据类型所对应的引用数据类型。 Object可统一所有数据,包装类的默认值是null 包装类中实际上就是持有了一个基本类型的属性,作为数据的存储空间(Byte中有一个byte属性),还提供了常用的转型方法,以及常量 对应的类型如下 基本类型 包装器类型 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 二、Java中的包装器类主要的目的: 提供一种机制,将基本值“包装”到对象中,从而使基本值能够包含在为对象而保留的操作中,java5增加了自动装箱和拆箱,可以由java自动处理了。 为基本值提供分类功能。这些功能大多数于各种转换有关:在基本值和String对象间相互转换,在基本值和String对象之间按不同基数转换。 三、包装类共同的方法 带有基本值参数并创建包装类对象的构造函数。 例如 Integer in = new Integer(145);

a+=b和a=a+b区别

对着背影说爱祢 提交于 2020-03-07 03:03:20
首先建议你看一下这篇 char、byte、short类型的加法和类型转换问题 https://www.cnblogs.com/codecheng99/p/12431997.html 相信你会明白很多,然后再来了解 a+=b和a=a+b的区别 看下面两段代码 --- public class abTest { public static void main(String[] args) { byte a = 127; a += 1; System.out.println(a); //运行结果为-128,这证明了a+=1自动将byte类型的a转换成int类型 } } public class abTest { public static void main(String[] args) { byte a = 127; byte b = 127; a = a + b; //编译出错 a = a + 5; //编译出错 a = (byte)(a+b); //正常 a += b; //正常 } } 总结: 1、对于同样类型的a,b来说 两个式子执行的结果确实没有什么区别。但是从编译的角度看吧,a+=b;执行的时候效率高。 2、对于不同类型的a,b来说 2.1 不同类型的两个变量在进行运算的时候,我们经常说到的是类型的转换问题。这里,记住两点:一、运算过程中,低精度的类型向高精度类型转换。二

数据类型转换

橙三吉。 提交于 2020-03-04 19:56:27
Java中类型转换主要分为两种 自动类型转换 自动类型转换就是不需要做任何处理,编译器自动完成的数据转换 条件:自动数据转换必须由数据范围小的向数据范围大的类型转换 例如:int→long int→float int numeral1 = 10 ; float numeral2 = 11.1f ; numeral2 = numeral1 ; System . out . println ( numeral2 ) ; 输出结果 如果转换范围变成由大变小 则直接报错 强制类型转换 强制类型转换则是需要用特殊手段进行数据的强制转换;不需要遵循自动转换的规则 但是强制类型转换会出现精度偏差或者数据溢出的情况 int numeral1 = 10 ; float numeral2 = 11.1f ; numeral1 = ( int ) numeral2 ; System . out . println ( numeral1 ) ; 输出结果发现小数点后数据没有了 数据溢出情况 int numeral1 = 10 ; float numeral2 = 1111111111111111f ; numeral1 = ( int ) numeral2 ; System . out . println ( numeral1 ) ; 输出结果表示溢出 字符类型的数据转换会变为其对应的(int类型)

多态

早过忘川 提交于 2020-03-02 22:23:20
1、子类型转换成父类型,称为向上机制/upcasting,或者称为自动类型转换 2、java语法:父类型引用指向子类型对象 3、java程序永远都分为编译阶段和运行阶段 4、先分析编译阶段,再分析运行阶段,编译无法通过,也无法运行 5、 Animal a2=new Cat(); a2.move(); 编译阶段编译器检查a2这个引用数据类型为animal,由于animal.class字节码当中有move方法,所以编译通过,这个过程称为静态绑定,编译阶段绑定,只有静态绑定成功之后才会有后续的运行。。 在程序运行阶段,jvm堆内存当中真实创建的对象是cat对象,name在运行中移动会调用cat对象的move方法,此时发送了动态绑定,运行阶段绑定。 无论是cat类有没有重写move方法,运行阶段移动调用的是cat对象的move方法,因为底层真实对象是cat对象。 父类型引用指向子类型对象这种机制导致程序存在编译阶段绑定和运行阶段绑定两种不同的形态/状态,这种机制可以成为多态语法机制 6、 a2.catchMouse(); 不能调用,因为a2类型是animal类型,由于animal.class字节码当中没有catchMouse方法,所以编译不通过,静态绑定失败 7、以上问题怎么办? a2是无法直接调用,因为a2类型是animal类型,animal

C Primer Plus 第7章 C控制语句:分支和跳转 7.1 if语句

独自空忆成欢 提交于 2020-03-02 19:06:31
这个程序读入一系列每日的最低温度(摄氏度),并报告输入的总数,以及最低温度在零度以下的天数的百分率。在一个循环里使用scanf()读入数值,在每一次循环中增加计数器的值来统计输入数值的个数。if语句检测低于零度以下的温度并单独统计这些天的数目。 程序清单7.1 colddays.c ------------------------------------ //colddays.c --求出温度低于零度的天数的百分率 #include <stdio.h> int main (void) { const int FREEZING = 0; float temperature; int cold_days = 0; int all_days = 0; printf("Enter the list of daily low temperatures.\n"); printf("Use Celsius,and enter q to quit.\n"); while(scanf("%f",&temperature)==1) { all_days++; if(temperature<FREEZING) cold_days++; } if(all_days!=0) printf("%d days total:%.1f%% were below freezing.\n", all_days,100

static_cast, dynamic_cast, const_cast探讨

和自甴很熟 提交于 2020-03-02 14:04:56
一、隐式类型转换 二、显示类型转换 static_cast 用法: static_cast < type-id > ( expression ) 说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 需要转换的几种情况: 情况1:void指针->其他类型指针 情况2:改变通常的标准转换 情况3:避免出现可能多种转换的歧义 dynamic_cast 用法: dynamic_cast < type-id > ( expression ) 说明:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。 需要转换的情况: dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的 交叉转换 。 在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能 ,比static_cast更安全。 reinterpret_cast 用法: reinpreter_cast <type-id> (expression) 说明:type

C++中四种强制类型转换区别详解

情到浓时终转凉″ 提交于 2020-03-02 13:22:19
 C++即支持C风格的类型转换,又有自己风格的类型转换。C风格的转换格式很简单,但是有不少缺点的:   1.转换太过随意,可以在任意类型之间转换。你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成一个派生类对象的指针,这些转换之间的差距是非常巨大的,但是传统的C语言风格的类型转换没有区分这些。   2.C风格的转换没有统一的关键字和标示符。对于大型系统,做代码排查时容易遗漏和忽略。   C++风格完美的解决了上面两个问题。1.对类型转换做了细分,提供了四种不同类型转换,以支持不同需求的转换;2.类型转换有了统一的标示符,利于代码排查和检视。下面分别来介绍这四种转换:static_cast、dynamic_cast、const_cast和reinterpre_cast. 一、static_cast转换   1.基本用法:static_cast<type-id> expression   2.使用场景:   a、用于类层次结构中基类和派生类之间指针或引用的转换   上行转换(派生类---->基类)是安全的;   下行转换(基类---->派生类)由于没有动态类型检查,所以是不安全的。   b、用于基本数据类型之间的转换,如把int转换为char,这种带来安全性问题由程序员来保证   c、把空指针转换成目标类型的空指针   d