当前位置:文档之家› C#强制类型转换

C#强制类型转换

C#强制类型转换
C#强制类型转换

c# 强制转换(转)C# 2009-10-19 19:01:56 阅读326 评论0 字号:大中小

在C# 中,(int),Int32.Parse() 和Convert.toInt32() 三种方法有何区别?

int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为System.Int32。

(int)表示使用显式强制转换,是一种类型转换。当我们从int 类型到long、float、double 或decimal 类型,可以使用隐式转换,但是当我们从long 类型到int 类型转换就需要使用显式强制转换,否则会产生编译错误。

Int32.Parse()表示将数字的字符串转换为32 位有符号整数,属于内容转换[1]。

我们一种常见的方法:public static int Parse(string)。

如果string 为空,则抛出ArgumentNullException 异常;

如果string 格式不正确,则抛出FormatException 异常;

如果string 的值小于MinValue 或大于MaxValue 的数字,则抛出OverflowException 异常。

Convert.T oInt32() 则可以将多种类型(包括object 引用类型)的值转换为int 类型,因为它有许多重载版本[2]:

public static int T oInt32(object);

public static int T oInt32(bool);

public static int T oInt32(byte);

public static int T oInt32(char);

public static int T oInt32(decimal);

public static int T oInt32(double);

public static int T oInt32(short);

public static int T oInt32(long);

public static int T oInt32(sbyte);

public static int T oInt32(string);

......

(int)和Int32.Parse(),Convert.T oInt32()三者的应用举几个例子:

例子一:

long longType = 100;

int intType = longType; // 错误,需要使用显式强制转换

int intType = (int)longType; //正确,使用了显式强制转换

例子二:

string stringType = "12345";

int intType = (int)stringType; //错误,string 类型不能直接转换为

int 类型

int intType = Int32.Parse(stringType); //正确

例子三:

long longType = 100;

string stringType = "12345";

object objectType = "54321";

int intType = Convert.T oInt32(longType); //正确

int intType = Convert.T oInt32(stringType); //正确

int intType = Convert.T oInt32(objectType); //正确

例子四[1]:

double doubleType = Int32.MaxValue + 1.011;

int intType = (int)doubleType; //虽然运行正确,但是得出错误结果

int intType = Convert.T oInt32(doubleType) //抛出OverflowException 异常

(int)和Int32.Parse(),Convert.T oInt32()三者的区别:

第一个在对long 类型或是浮点型到int 类型的显式强制转换中使用,但是如果被转换的数值大于Int32.MaxValue 或小于Int32.MinValue,那么则会得到一个错误的结果。

第二个在符合数字格式的string 到int 类型转换过程中使用,并可以对错误的string 数字格式的抛出相应的异常。

第三个则可以将多种类型的值转换为int 类型,也可以对错误的数值抛出相应的异常。

无论进行什么类型的数值转换,数值的精度问题都是我们必须考虑的

1.任何一门编程语言均有相关数据类型。C#也不例外,其基本数据类型有int,short,long,float,double,string等。数据类型之间可以相互转换。不过转换过程要注意小类型能转换成大类型,但大类型一般不能转换成小类型。如int型可以转换成float型,但float型不一定可以转换成int型,至少这在C,C++是这样,但在C#中明显有了改变,似乎微软公司也允许这样的形式存在了。例如:

double dbl_num=12345678910.456;

int k = (int) dbl_num ;//此处运用了强制转换

以上代码如果在C,C++中强制转换成int型,肯定会出错,但现在在C#中却不会出错了,不过转换后的值往往是溢出值,是不精通的。这点需要大家注意。

2.采用另一种方式转换类型,如int.parse(),int32.parse()等采用方法来转换.

如string str=”100″;

int i=int.Parse(str);

注意:str除掉引号的类型必须和*.Parse的类型一致。如果将100改成100.78,即变成float 类型,运行时将会报错”输入字符串的格式不正确.”

3.采用后缀式转换,如k.toString(),一般运用于字符串或日期等其它类型

int i=100;

string s=i.T oString();

4.采用Convert类来实现转换,该类基本支持所以类型之间的转换

string str=”100″;

int i = Convert.T oInt16(str);

注意:str除掉引号的类型必须和Convert.*的类型一致。如果将100改成100.78,即变成float 类型,运行时将会报错”输入字符串的格式不正确.”

java对象转换String类型的三种方法

北大青鸟中关村 java对象转换String类型的三种方法在很多情况下我们都需要将一个对象转换为String类型。一般来说有三种方法可以实现:Object.toString()、(String)Object、String.valueOf(Object)。下面对这三种方法一一分析 一、采用Object.toString() toString方法是https://www.doczj.com/doc/d212990552.html,ng.Object对象的一个public方法。在java中任何对象都会继承Object 对象,所以一般来说任何对象都可以调用toString这个方法。这是采用该种方法时,常派生类会覆盖Object里的toString()方法。 但是在使用该方法时要注意,必须保证Object不是null值,否则将抛出NullPointerException 异常。 二、采用(String)Object 该方法是一个标准的类型转换的方法,可以将Object转换为String。但是在使用该方法是要注意的是需要转换的类型必须是能够转换为String的,否则会出现CalssCastException异常错误。 代码代码如下: Object o = new Integer(100); String string = (String)o; 这段程序代码会出现https://www.doczj.com/doc/d212990552.html,ng.ClassCastException: https://www.doczj.com/doc/d212990552.html,ng.Integer cannot be cast to https://www.doczj.com/doc/d212990552.html,ng.String。因为将Integer类型强制转换为String类型,无法通过。 三、String.valueOf(Object) 上面我们使用Object.toString()方法时需要担心null问题。但是使用该方法无需担心null值问题。因为在使用String.valueOf(Object)时,它会判断Object是否为空值,如果是,则返回null。下面为String.valueOf(Object)的源码: 代码代码如下: public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 从上面我们可以看出两点:一是不需要担心null问题。二是它是以toString()方法为基础的。但是一定要注意:当object为null时,String.valueOf(object)的值是字符串对象:"null",而不是null!!!

C语言中的强制类型转换运算

C语言中的强制类型转换运算 C语言中的强制类型转换是通过类型转换运算来实现的。 其一般形式为: (类型说明符)(表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 例如: (float)a 把a转换为实型 (int)(x+y)把x+y的结果转换为整形 在使用强制转换时应注意以下问题: 1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如果把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。 2)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性的转换,而不改变数据说明时对该变量定义的类型。 【例1】 #include int main (void) { float f = 3.14; printf("(int)f = %d,f = %.2f\n",(int)f,f); return 0; } 本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为5(删去了小数)而f的值仍为5.75. 1、求余运算符(模运算符)“%”:双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。 #include int main (void) { printf(" %d\n",110%3);

return 0; } 本例输出110除以3所得的余数2。 2、算数表达式和运算符的优先级和结合性 表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,他们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。 算数表达式是由算术运算符和括号连接起来的式子。 算数表达式:用算数运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。 以下是算数表达式的例子: a+b; (a*2)/c; (x+r)*8-(a+b)/7; ++I; Sin(x)+sin(y); (++i)-(j++)+(k--); 运算符的优先级:C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z,则先执行x-y运算,然后再执行+z运算。这是左结合性。右结合性最典型的是赋值运算符。如x=y=z. 3、强制类型转换运算符 其一般形式为: (类型说明符)(表达式)

强制类型转换及指针本质

强制类型转换类型的本质指针的本质函数指针 昨天给朋友讲了 3个问题, A〉什么是函数指针,本质是?指针的本质? B〉什么是类型,类型的本质是? C〉什么是强制类型转换,本质是? 作者张世光亿通科技软件部 060913 QQ:87895224 MSN:Z_55@https://www.doczj.com/doc/d212990552.html, A〉什么是函数指针,本质是?指针的本质? 如 void fun(); //函数声明 void (*ptrfun)();//函数指针变量ptrfun 的声明,表明ptrfun这个指针指向一个 void fun()函数类型的函数地址。 〉函数的名字代表函数的地址; 所以,可以这样 ptrfun =fun ;//给ptrfun赋值。此时,ptrfun 就是 fun 函数的别名; 在需要调用 fun()的地方,可以这样写 (*ptrfun)(); //等同于 fun(); //这就是别名的意义。 指针的本质是一个固定长度(32位系统上是4个byte)的空间中放置的内容是一个内存地址。 而指针类型的本质就是对这个地址的解释方式。不同的指针类型,对即使相同的内存地址的解释是不同的,受影响的空间大小也不同。受影响的空间的大小等于sizeof(类型)。 如 short i=0x1234; short * psort = &i; char *pchar = &i; //此时 pshort ==pchar;即指向了同一个地址; 那么 (*pshort) 和 (*pchar) 的值各是什么? 假设 sizeof(short)==2 sizeof(char)==1 假如内存中这样: ---地址 0x1000-- | 0x34 | ---------------- | 0x12 | ---------------- 那么,psort==0x1000 ,同时,pchar==0x1000 ; 那么,(*psort) 代表是地址0x1000 和 0x1001 这两个字节的内容; <-----由其类型决定 (*pchar)代表地址0x1000 这一个字节的内容; <<-----由其类型决定

C++强制类型转换

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。 static_cast 用法:static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ?用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。 ?用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ?把空指针转换成目标类型的空指针。 ?把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。 dynamic_cast 用法:dynamic_cast < type-id > ( expression ) 该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;如果type-id是类指针类型,那么expression也必须是一个指针,如果ty pe-id是一个引用,那么expression也必须是一个引用。 dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。

Java中常见异常类型及分析

Java常见异常类型及原因分析 这里介绍几种常见的异常并对原因进行分析,包括: ●NullPointException异常; ● ClassCastException异常; ● ArrayIndexOutOfBoundsException异常; ●UnsupportedClassVersionError错误; ●NumberFormatExceptio异常 ●堆栈溢出和内存溢出。 1 NullPointException异常 顾名思义,NullPointerException是空指针异常。但是在Java中没有指针,怎么会有空指针异常呢? 在C++中,声明的指针需要指向一个实例(通过new方法构造),这个指针可以理解为地址。 在Java中,虽然没有指针,但是有引用(通常称为对象引用,一般直接说对象),引用也是要指向一个实例对象(通过new方法构造)的,从这种意义上说,Java中的引用与C++中的指针没有本质的区别,不同的是,处于安全的目的,在Java中不能对引用进行操作,而在C++中可以直接进行指针的运算,例如book++等。 所以这里的NullPointerException虽然不是真正的空指针异常,但本质上差不多,是因为引用没有指向具体的实例,所以当访问这个引用的方法的时候就会产生这种异常。例如下面的代码: String str = "这是一个测试用的字符串!"; System.out.println(str.length()); 这段代码没有问题,但是如果改成下面的代码: String str ; System.out.println(str.length()); 就会产生NullPointerException异常了,当然一般人不会犯这样低级的错误。 那这种异常通常是如何产生的呢?比较多见的是下面的两种情况: 1)把调用某个方法的返回值直接赋值给某个引用,然后调用这个引用的方法。在这种情况下,如果返回的值是null,必然会产生NullPointerException异常。例如: String userName=request.getParameter("userName"); if(userName.length()==0) ...... else ...... 如果request.getParameter("userName")的结果为null,则这里就会产生这种异常。 2)在方法体中调用参数的方法。这种情况下,如果调用方法的时候传递进来的值是null,也要产生NullPointerException异常。 要解决这种异常,只需要检查异常出现在第几行(通常在集成开发环境中会提示用户错误发生在第几行),然后查看调用了哪个对象的方法,然后检查这个对象为什么没有赋值成

全国计算机等级考试二级C语言真题题库3+2015年9月

全国计算机等级考试二级C语言真题题库3 2015年9月 (总分:43.00,做题时间:120分钟) 一、选择题(每小题1分,共40分)(总题数:40,分数:40.00) 1.下列叙述中正确的是()。 (分数:1.00) A.程序可以作为算法的一种表达方式√ B.算法的有穷性是指算法的规模不能太大 C.算法的复杂度用于衡量算法的控制结构 D.算法的效率与数据的存储结构无关 解析:[解析]算法的有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的,故B选项错误。一个算法复杂度的高低体现在运行该算法所需要的计算机资源的多少,故C选项错误。算法的效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,这就与算法本身设计的优劣以及具体的编程实现有关,数据的存储结构会极大的影响程序的执行时间,故D选项错误。算法在实现时需要用具体的程序设计语言来实现,所以程序可以作为实现算法的一种表达方式。故选A选项。 2.某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m-1,rear=m,则该循环队列中的元素个数为()。 (分数:1.00) A.m-1 B.1 √ C.m D.0 解析:[解析]循环队列长度为m,由初始状态为front=rear=m可知此时循环队列为空。入队运算时,首先队尾指针(rear)进1(即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队尾指针rear =m+1时,置rear=1。迟队运算时,排头指针(front)进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,则该循环队列中的元素个数为m-(m-1)=1。故选择B 选项。 3.能从任意一个节点开始没有重复地扫描到所有节点的数据结构是()。 (分数:1.00) A.循环链表√ B.双向链表 C.二叉链表 D.有序链表 解析:[解析]在单链表的第一个节点前增加一个表头节点,队头指针指向表头节点,最后一个节点的指针域的值由NULL改为指向表头节点,这样的链表称为循环链表。在循环链表中,只要指出表中任何一个节点的位置,就可以从它出发没有重复地扫描到表中其他所有的节点。双向链表与二叉链表都可以扫描到所有节点,但是会有重复。有序链表如果是单链表的情况下,不能扫描到所有节点。故A选项正确。 4.某棵树中共有25个节点,且只有度为3的节点和叶子节点,其中叶子节点有7个,则该树中度为3的节点数为()。 (分数:1.00) A.不存在这样的树√ B.7 C.8 D.6 解析:[解析]树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。首先假设这样的树是存在

简析JAVA中int、String间类型转换

初学Java,对于类型转换以及强制类型转换还是没什么难度的,但是初学者往往在涉及到String类型的转换时,就会抛出问题了。这里收集整理了下,仅供参考。 int 转String int i=12345; String s=”"; 第一种方法:s=i+”"; 第二种方法:s=String.valueOf(i); 这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? String转int s=”12345″; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue(); 这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? 以下是答案:

3.) String s = “” + i; 注: Double, Float, Long 转成字串的方法大同小异. JAVA数据类型转换这是一个例子,说的是JAVA中数据数型的转换.供大家学习package shenmixiaozhu; import java.sql.Date; public class TypeChange { public TypeChange() { } //change the string type to the int type public static int stringToInt(String intstr) { Integer integer; integer = Integer.valueOf(intstr); return integer.intValue(); } //change int type to the string type public static String intToString(int value) { Integer integer = new Integer(value); return integer.toString(); } //change the string type to the float type public static float stringToFloat(String floatstr) { Float floatee; floatee = Float.valueOf(floatstr); return floatee.floatValue(); } //change the float type to the string type public static String floatToString(float value) { Float floatee = new Float(value); return floatee.toString(); } //change the string type to the sqlDate type public static java.sql.Date stringToDate(String dateStr) { return java.sql.Date.valueOf(dateStr); } //change the sqlDate type to the string type

int.parse和强制类型转换的区别

c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别收藏 以前经常为这几种数据类型转换方式而迷茫,这次为了彻底搞清它们之间的区别和优缺点,在网上查看了一些资料,并亲自验证了一下,在此写出来,一方面,为那些跟我有过相似经历的朋友们些许,另一方面,希望前辈们指导一下,看哪里有不合适的地方。 1 (int)变量名[强制类型转换]: 该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显式转换,也就是该数据类型转换方式,否则会产生编译错误。 该方式对于浮点数会做无条件舍去,失去精确度 当然,该方式也可以进行object到int得转换,但是,object的值要赋予int类型的值,否则会产生编译错误,而且object为null时也会出错。 最后切忌的一点,千万不要用来处理char类型到int类型的转换,否则传回的的值是ASCII代码,而并不是你想要的值。 2 int.Parse(string类型变量名) 该方式是将数字内容的字符串转为int类型,如果字符串内容为空或者null时,则抛出ArgumentNullException异常;如果字符串内容不是数字,则抛出FormatException异常;如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常。 使用该方法切忌的一点就是只能处理字符串内容,而且字符串内容只能在int类型可表示的范围之内。 3 int.TryParse(string s, out int result) 该方式也是将数字内容的字符串转为int类型,但是该方式比int.Parse优越的地方,就是它不会出现异常。如果转换成功返回true,如果转换失败返回false。很明显,最后一个参数为输出值,如果转换失败,输出值为0;如果转换成功,则输出相应的值。 4 Convert.ToInt32 该方式不仅可以将字符串转为int类型,还可以将其它类型的值转成int类型。变量若为object或string类型,当其值为null时,会传回0,不会造成程序错误,但是若此string类型的值为string.Empty,在转型成int时,仍会造成程序错误。 该方式对于浮点数会做四舍五入。 该方式同强制转换一样,不能用来处理char类型,否则传回的是ASCII代码。

C语言中不同的结构体类型的指针间的强制转换详解

C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构体中的偏移地址。 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在是因为我们对它们有不同的解读,param的值就是一个32位值,并且存储在某个内存单元中,通过这个32位值就能找到param所指向的结构的起始地址,通过这个起始地址和各个结构所包含变量离起始地址的偏移对这些变量进行引用, param->bIsDisable只是这种引用更易读的写法,只要param是指向 PAINT_PARAM的指针,那么param的值就肯定存在,param存在,偏移量已知,那么param->bIsDisable就肯定存在,只是要记住,param->bIsDisable只是代表了对param一定偏移地址的值。 不是说某个地址有那个结构体你才能引用,即使没有,你也能引用,因为你已经告诉了编译器param变量就是指向一个PAINT_PARAM结构体的变量并且指明了param的值,机器码的眼中是没有数据结构一说的,它只是机械的按照 指令的要求从内存地址取值,那刚才的例子来说,peg->x,peg->y的引用无论 0x30000000是否存在一个eg结构体都是合法的,如果0x30000000开始的8 个字节存在eg结构体,那么引用的就是这个结构体的值,如果这个位置是未定义的值,那么引用的结果就是这8个字节中的未定义值,内存位置总是存在的,而对内存中值的引用就是从这些内存位置对应的内存单元取值。 举个例子: typedefstruct_eg { int x; int y; }eg;

指针强制转换

1、指针类型转换请使用static_cast、dynamic_cast等操作 2、指针变量(不管那种指针),大小都是四个字节,内容就是指向的对象的首地址。不同类型指针不同点就是对首地址之后的那块内存会做不同解释。 建议你看看《Inside C++ Object Model》里面关于指针的内容,里面有清晰的说明 int * pi = new int; pi 指向了一块内存的首地址,这块内存应该有sizeof(int)个字节, 由于pi是int *类型,所以通过pi进行的操作,编译器都认为pi的内容是一个有sizeof(int)个字节的int 型变量的首地址,所以*pi = 4,遇到这样的操作,编译器产生的代码就是把4这个数付到pi所指的四个字节里。 char * pc = (char *)pc; //建议这样写char * pc = static_cast (pc); *pc = '4 '; 由于pc是char *类型,所以通过pc进行的操作,编译器都认为pc的内容是一个有sizeof(char)个字节的char型变量的首地址,所以*pc = '4 ',遇到这样的操作,编译器产生的代码就是把4这个字符付到pc所指的第一个字节里。虽然,pc实际指向的是int型的变量,有4个字节。 改变指针的类型,解引用操作的时候会影响到所指向的地址内容(类型所占的字节数可能不同,还有高位是符号位或是数据位)解析,不会发生数据丢失 未必!设想下面三个类: class A { public: int m_nA; A():m_nA(1){} public: A* GetA(){ return this; } }; class B { public: int m_nB; B():m_nB(2){} }; class C : public A, public B { public:

Java(1-4)复习题

《使用Java理解程序逻辑》1-4章阶段测试 一课后选择题 二、选择题 1、下列语句中,( BD )正确完成整形变量的声明和赋值。 A). int count,count=0; B). int count=0; C). count=0; D). int count1=0,count2=1; 2、在JAVA中,用于向控制台打印输出信息的语句是(A)。 A). System.out.println() B). System.println() C). Out.println() D). Print.println() 3、给定某Java程序的main方法如下所示,该程序的运行结果是( A)。Public static void main(String[] args){ int i=0; System.out.println(i ); } (选择一项)A A). 输出0 B). 输出1 C). 编译错误 D). 运行时出现异常 4、在Java 中,下列代码的远行结果是(D )。 public static void main(String[] args) { int a=1,b=2,c=3; if(a<0) if(b<0) c=10;

c=20; System.out.println(c); } A). 输出:10 B). 输出:20 C). 输出:3 D). 编译报错 5、在Java中,源文件Test.java中包括如下代码段,则程序编译运行结果是(b)。 public class Test{ public static void main(String[]args){ system.out.print(“Hello!”); } } A). a) 输出:Hello! B). b) 编译出错,提示“无法解析system” C). c) 运行正常,但没有输出任何内容 D). d) 运行时出现异常 6、在Java中,Scanner类提供从控制台获取键盘输入的功能,下列语句( b)能够正确实例化Scanner类的对象,用于获得键盘输入的数据。 A). Scanner input = new Scanner(System.out) B). Scanner input = new Scanner(System.in) C). Scanner input = new Scanner(System) D). Scanner input = new Scanner() 7、下面程序的执行结果是( c) public class Weather { public static void main(String[] args) { int shiDu=45; if(shiDu>=80){ System.out.println("要下雨了"); }else if(shiDu>=50){ System.out.println("天很阴"); }else if(shiDu>=30){ System.out.println("很舒适"); }else if(shiDu>=0){ System.out.println("很干燥");

void指针小结

C/C++语言void及void指针深层探索 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: 这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。 void真正发挥的作用在于: (1)对函数返回的限定; (2)对函数参数的限定。 我们将在第三节对以上二点进行具体说明。 众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。 例如: 其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为: 而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换: 但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错: 提示“'=' : cannot convert from 'void *' to 'int *'”。 3.void的使用

C语言类型强制转换

C语言类型强制转换 本篇主要介绍 C语言类型强制转换。 强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。例如: (float) a 把a转换为实型(int)(x+y) 把x+y的结果转换为整型在使用强制转换时应注意以下问题: 1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y) 写成(int)x+y则成了把x转换成int型之后再与y相加了。 2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进 行的临时性转换,而不改变数据说明时对该变量定义的类型。 例1: main() { float f=5.75; printf("(int)f=%d,f=%f\n",(int)f,f); } f<--5.75 将float f强制转换成int f float f=5.75;printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int 型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f 的值为 5(删去了小数)而f的值仍为5.75。 例2:比如我们可以(int)'A',这样转换后的结果为A的ASCII码数值,因为那块内存本来就存的那个数,只是换个形式使用而已。知道上面的原则,我们 可以对任何数据类型进行转换,但是转换的结果可能不是你想像的结果,举例 (int)'9'的结果为多少?不是9而是0x39。来个高深点的printf("%d",'12'); 的输出是什么?正确答案是12594,因为printf("%d",'12'),打印的是存储12 的内存地址上的内容,即ASCII码值2存储在低位,1储在高位地址,0x32就是2 的ASCII码,0x31就是1的ASCII码,所以是0x3132,转换成10进制就是12594!

Java语言基本数据类型、转换及其封装

Java语言基本数据类型、转换及其封装Java语言基本数据类型、转换及其封装 1. 逻辑类型 ·常量 true,false。 ·变量的定义 使用关键字boolean来定义逻辑变量: boolean x; boolean tom_12; 也可以一次定义几个: boolean x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是变量的名字。定义时也可以赋给初值: boolean x=true,tom=false,漂亮=true,jiafei 2.整数类型 ·常量123,6000(十进制),077(八进制),0x3ABC(十六进制)。 ·整型变量的定义分为4种: 1.int 型 使用关键字int来定义int型整形变量 int x int tom_12 也可以定义几个: int x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是名字。定义时也可以赋给初值: int x=12,tom=-1230,漂亮=9898,jiafei 对于int型变量,分配给4个字节byte,一个字节由8位(bit)组成,4个字节占32位(bit)。bit 有两状态,分别用来表示0,1。这样计算机就可以使用2进制数来存储信息了。内存是一种特殊的电子元件,如果把内存条放大到摩天大

楼那么大,那么它的基本单位——字节,就好比是大楼的房间,每个房间的结构都是完全相同的,一个字节由8个能显示两种状态的bit组成,就好比每个房间里有8个灯泡,每个灯泡有两种状态——亮灯灭灯。 对于 int x=7; 内存存储状态如下: 00000000 00000000 00000000 00000111 最高位:左边的第一位,是符号位,用来区分正数或负数,正数使用原码表示,最高位是0,负数用补码表示,最高位是1。例如: int x=-8; 内存的存储状态如下: 11111111 11111111 11111111 11111000 要得到-8的补码,首先得到7的原码,然后将7的原码中的0变成1,1变成0,就是-8的补码。 因此,int型变量的取值范围是-2^31~2^31-1。 2. byte型 使用关键字byte来定义byte型整型变量 byte x ; byte tom_12; 也可以一次定义几个: byte x,tom,jiafei,漂亮 x,tom,jiafei,漂亮都是名字。定义时也可以赋给初值: byte x=-12,tom=28,漂亮=98,jiafei 注:对于byte型变量,内存分配给1个字节,占8位,因此byte型变量的取值范围是: -2^7~2^7-1。

c语言强制转换四舍五入

在C语言中,强制转换后的数是四舍五入还是去尾? 去尾 要想四舍五入的话 (int)(number+0.5) 都是直接去尾的。当为数太多时直接截断。所以在强制转换时要很注意 C语言有没有数据的四舍五入?什么情况下会用到四舍五入?数据类型转换?有四舍五入的情况,在你想要保留几位小数的时候,多余的紧接着的一位要四舍五入 不过C里面没有提供四舍五入的函数,不过你可以这样 a = (int)(a*100 + 0.5)/100 这只是一个小技巧,对a的第三位进行四舍五入 提问者评价 +0.5可以解决这个问题!谢谢你! C语言中的float和double类型数据是浮点数,所以小数部分就存在四舍五入问题,当指定输出位数在精度范围之内时,系统会自动舍入,无需人工干预,如果小数部分也在精度范围内,比如10.0/2.0 = 5.0,2位以上的输出位数时,后面的都是0,此时,当然不需要舍入了。 数据类型转换有两种方式,一种是默认强制转换,比如将char、short、Int、Long和float类型数据赋给double类型变量时,编译程序会自动实施转换,这是因为,在精度更高时,这样的转换是内有损失的。另一种是手动强制类型转换,比如dnum = (double)inum;,意思是将整形变量inum首先转换为双精度数据,然后再付给dnum。当将高精度类型变量赋给低精度类型变量时,除非手动强制转换,否则,编译程序会有提示的。 数据强制转换是用舍弃的方法,不会用四舍五入,什么时候用四舍五入是需要详细说明的,也就是你的业务需求而定,你可以把数字+0.5,然后进行强制转换 ouble强制转换成int型的时候保留整数部分的。。 比如double a=1.5; int b=a; a就是1。 C语言强制类型转换问题 2012-03-11 17:52匿名|分类:C/C++ |浏览2634次 int a,b; //keil c里的int,也就是16位。 a=0000; b=0x1234; a=(char)(b);

MFC+类型转换

VC++类型转换整理 已有 84 次阅读2009-11-30 16:18标签: 类型 1、CString to char* 经过类型强制转换,可以将CString类型转换成char*,例如:CString cStr = "Hello,world!"; char* zStr = (char*)(LPCTSTR)cStr; 2、char* to CString char*类型可以直接给CString,完成自动转换,例如: char* zStr = "Hello,world!"; CString cStr = zStr; 3、CString to LPCSTR 将CString转换成LPCSTR,需要获得CString的长度,例如:CString cStr = _T("Hello,world!"); int nLen = cStr.GetLength(); LPCSTR lpszBuf = cStr.GetBuffer(nLen); 4、CString to LPSTR 这个和第3个技巧是一样的,例如: CString cStr = _T("Hello,world!"); int nLen = str.GetLength(); LPSTR lpszBuf = str.GetBuffer(nLen); 5、Char[] to int 将字符串类型转换成整数型,可以使用atoi函数,例如: char c[10]; int n; n = atoi?; 6、Char[] to float 和第5个技巧一样,使用atof()函数可以转换成float型,例如:char c[10]; float f; f = atof?; 7、Char* to int 和第5个技巧完全一样,例如: char *str = "100"; int i;

Java语言基础

孙燮华编著《Java软件编程实例教程》清华大学出版社 第2章Java语言基础 本章主要学习Java语言的基本语法,包括标识符,数据类型、表达式、语句和数组等。 2.1标识符与关键词 2.1.1 标识符 1.标识符的定义规则 在Java中,对变量、类、接口和方法等进行命名所使用的字符串称为标识符。一个合法的标识符要满足以下的规则: ◆以英文大小写字母、下划线“_”、或“$”开始的一个字符序列。 ◆数字不能作为标识符的第1个字符。 ◆标识符不能是Java的关键词。 ◆标识符大小写敏感且长度没有限制。 例如,下面的字符串都是合法的标识符: USERNAME, _sys_VAR, $change, thisOne, 学生, a教授但下面的标识符是非法的: 3student, %name, -num, !_not, *ptr, @email

2.标识符风格约定 为了使命名更为规范,Java对标识符还有如下一些约定。 ◆对于变量名和方法名,不能用下划线“_”、和“$”作为标识符的第1个字符。因为这两个字符对于Java内部类具有特殊意义。 ◆类名、接口名、变量名和方法名采用大小写混合形式,每个英文单词的首字母用大写,其余用小写, 无空格连接。例如,HelloWorldFromJava。但变量名和方法名的首字母用小写,如firstVariableName。类名和接口名的首字母用大写,如类名HelloWorld。 ◆常量名完全用大写,且用下划线“_”作为标识符中每个单词的分隔符,例如,MAX_SIZE。 ◆方法名应使用动词,类名和接口名使用名词。 ◆变量名应有一定的意义,尽量不使用单个字符作为变量名。但临时性的变量,如循环控制变量可以用i, j, k等。 2.1.2 关键词 关键词是Java的保留字。Java编译器在词法扫描时需要区分关键词和一般的标识符。因此,用户自定义的标识符不能与这些关键词重名,否则会出现编译错误。另外,true, false和null虽然不是关键词,但也被保留,同样不能用来定义标识符。表2-1列出了Java的关键词。

数据类型转换

数据类型转换 各类整数之间的转换 C语言中的数分8位、16位和32位三种。属于8 位数的有:带符号 字符char,无符号字符unsigned char 。属于16位数的有:带符号整 数int,无符号整数unsigned int(或简写为unsigned),近指针。属 于32位数的有:带符号长整数long,无符号长整数 unsigned long, 远指针。 IBM PC是16位机,基本运算是16位的运算,所以,当8位数和16 位数进行比较或其它运算时,都是首先把8 位数转换成16位数。为了 便于按2的补码法则进行运算,有符号8位数在转换为16位时是在左边 添加8个符号位,无符号8位数则是在左边添加8个0。当由16位转换成 8位时,无论什么情况一律只是简单地裁取低8位,抛掉高8 位。没有 char或usigned char常数。字符常数,像"C",是转换为int以后存储 的。当字符转换为其它 16 位数(如近指针)时,是首先把字符转换为 int,然后再进行转换。 16位数与32位数之间的转换也遵守同样的规则。 注意,Turbo C中的输入/输出函数对其参数中的int和unsigned int不加区分。例如,在printf函数中如果格式说明是%d 则对这两种 类型的参数一律按2 的补码(即按有符号数)进行解释,然后以十进制 形式输出。如果格式说明是%u、%o、%x、%X,则对这两种类型的参数 一律按二进制 (即按无符号数) 进行解释,然后以相应形式输出。在 scanf函数中,仅当输入的字符串中含有负号时,才按2的补码对输入 数进行解释。 还应注意,对于常数,如果不加L,则Turbo C一般按int型处理。 例如,语句printf("%081x",-1L),则会输出ffffffff。如果省略1, 则输出常数的低字,即ffff。如果省略L,则仍会去找1个双字,这个 双字的就是int常数-1,高字内容是不确定的,输出效果将是在4个乱 七八糟的字符之后再跟ffff。 在Turbo C的头文件value.h中,相应于3 个带符号数的最大值, 定义了3个符号常数: #define MAXSHORT 0X7FFF #define MAXINT 0X7FFF #define MAXLONG 0X7FFFFFFFL 在Turbo C Tools中,包括3对宏,分别把8位拆成高4位和低4位, 把16位拆成高8位和低8位,把32位拆成高16位和低16位。 uthinyb(char value) utlonyb(char value) uthibyte(int value) utlobyte(int value) uthiword(long value) utloword(long valueu) 在Turbo C Tools中,也包括相反的3 个宏,它们把两个4位组成 一个8位,把两个8位组成一个16位,把两个16位组成一个32位。 utnybbyt(HiNyb,LoNyb) utwdlong(HiWord,Loword) utbyword(HiByte,LoByte)实数与整数之间的转换 Turbo C中提供了两种实数:float和 double。float 由32 位组 成,由高到低依次是:1个尾数符号位,8个偏码表示的指数位(偏值= 127),23个尾数位。double由64位组成,由高到低依次是:1 个尾数

相关主题
文本预览
相关文档 最新文档