数字歇后语
强制类型转换篇(一):强制类型转换1 (int)变量名[强制类型转换]该转换方式主要用于数字类型之间的转换,从int类型向long,float,double,decimal 类型转换可以使用隐式转换,但从long型到int 就需要使用显示转换,即使用该类型的转换方式否则产生编译错误。该方式对于浮点数
强制类型转换

强制类型转换篇(一):强制类型转换


1.(int)变量名[强制类型转换]
    该转换方式主要用于数字类型之间的转换,从int类型向long,float,double,decimal 类型转换可以使用隐式转换,但从long型到int 就需要使用显示转换,即使用该类型的转换方式否则产生编译错误。
  该方式对于浮点数会无条件的舍去,会失去精确度
  对于char类型的到int类型的转换,传回的值是ASCII码
2.int.Parse(string 变量名)
  该方式是将数字内容的字符串转换为int类型,如果字符串的内容为Null ,则抛出ArgumentNullException异常;如果字符串内容不是数字,则抛出FormatException异常。
  使用该方法只能处理字符串的内容,而且转换后的字符串内容要在int类型的可表示范围之内
3.int.TryParse(string s, out int result)
  该方式也是将数字内容的字符串转换为int类型,但是该方式有比int.Parse 优越的地方,就是它不会出现异常,最后一个参数result是输出值,如果转换成功则输出相应的值,转换失败则输出0。
4. Convert.ToInt32
  该方式不仅可以将字符串类型转换为int,还可以将其他的类型转换为int。变量若为object或string类型,当其值为Nul时,会传回0,不会造成程序错误,但是若此string类型的值为string.Empty,转换成int时,程序仍会出错。
  该方式对于float类型做四舍五入。
  该方式同强制类型转换一样在处理char类型的时候,返回的都是ASCII码
 
5.
Employee e = o as Employee;if(e!=null){//在if语句中使用e}在这段代码中,CLR首先核实o是否兼容于Employee;如果是,as 将返回对同一个对象的非null引用。如果不兼容,as则会返回Null值。由于as操作符造成CLR只校验一次对象的类型。if语句只检查e是否为null.这个检查速度比校验类型快的多。as操作符的工作方式与强制类型转换一样,只是它永远不会抛出异常。
但是as 不能用于值类型而is却可以。例如如下代码将无法编译
object o = Factory.GetValue( );int i = o as int;

强制类型转换篇(二):指针强制类型转换


当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。
例十四:
1。 float f=12.3;
2。 float *fptr=&f;
3。 int *p;
在上面的例子中,假如我们想让指针p指向实数f,应该怎么搞?是用下面的语句吗?
p=&f;
不对。因为指针p的类型是int*,它指向的类型是int。表达式&f的结果是一
个指针,指针的类型是float*,它指向的类型是float。两者不一致,直接赋值的方法是不行的。至少在我的MSVC++6.0上,对指针的赋值语句要求赋值号两边的类型一致,所指向的类型也一致,其它的编译器上我没试过,大家可以试试。为了实现我们的目的,需要进行"强制类型转换":
p=(int*)&f; 如果有一个指针p,我们需要把它的类型和所指向的类型改为TYEP*和TYPE,
那么语法格式是:
(TYPE*)p;
这样强制类型转换的结果是一个新指针,该新指针的类型是TYPE*,它指向的类型是TYPE,它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都没有被修改。
一个函数如果使用了指针作为形参,那么在函数调用语句的实参和形参的结合过程中,也会发生指针类型的转换。
例十五:
void fun(char*);
int a=125,b;
fun((char*)&a);
...
...
void fun(char*s)
{
char c;
c=*(s+3);*(s+3)=*(s+0);*(s+0)=c;
c=*(s+2);*(s+2)=*(s+1);*(s+1)=c;
}
}
注意这是一个32位程序,故int类型占了四个字节,char类型占一个字节。函数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗?在函数调用语句中,实参&a的结果是一个指针,它的类型是int
*,它指向的类型是int。形参这个指针的类型是char*,它指向的类型是char。这样,在实参和形参的结合过程中,我们必须进行一次从int*类型到char*类型的转换。结合这个例子,我们可以这样来想象编译器进行转换的过程:编译器先构造一个临时指针
char*temp,然后执行temp=(char*)&a,最后再把temp的值传递给s。所以最后的结果是:s的类型是char*,它指向的类型是char,它指向的地址就是a的首地址。
我们已经知道,指针的值就是指针指向的地址,在32位程序中,指针的值其实是一个32位整数。那可不可以把一个整数当作指针的值直接赋给指针呢?就象下面的语句:
unsigned int a;
TYPE *ptr;//TYPE是int,char或结构类型等等类型。
...
...
a=20345686;
ptr=20345686;//我们的目的是要使指针ptr指向地址20345686(十进制

ptr=a;//我们的目的是要使指针ptr指向地址20345686(十进制)
编译一下吧。结果发现后面两条语句全是错的。那么我们的目的就不能达到了吗?不,还有办法:
unsigned int a;
TYPE *ptr;//TYPE是int,char或结构类型等等类型。
...
...
a=某个数,这个数必须代表一个合法的地址;
ptr=(TYPE*)a;//呵呵,这就可以了。
严格说来这里的(TYPE*)和指针类型转换中的(TYPE*)还不一样。这里的(TYPE*)的意思是把无符号整数a的值当作一个地址来看待。
上面强调了a的值必须代表一个合法的地址,否则的话,在你使用ptr的时候,就会出现非法操作错误。
想想能不能反过来,把指针指向的地址即指针的值当作一个整数取出来。完全可以。下面的例子演示了把一个指针的值当作一个整数取出来,然后再把这个整数当作一个地址赋给一个指针:
例十六:
int a=123,b;
int *ptr=&a;
char *str;
b=(int)ptr;//把指针ptr的值当作一个整数取出来。
str=(char*)b;//把这个整数的值当作一个地址赋给指针str。
好了,现在我们已经知道了,可以把指针的值当作一个整数取出来,也可以把一个整数值当作地址赋给一个指针。
指针的强制转换是非常危险的
main() 

int *piPointer; 
char cItem; 
cItem="a"; 
piPointer=(int *)&cItem; 
*piPointer=1298; 
}
这种强制转换是正确的,但是是非常危险的
在piPointer=(int *)&cItem;操作中
piPointer是一个整型指针,它需要指向一个整型空间(4字节)。
而cItem只是个字符型的,它只占用1个字节,不满足要求,因此在这里使用强制转换,
这个强制类型转换表示将cItem地址的值赋给指针,使用强制类型转换后,指针就可以操作
以cItem首地址为起始地址的4个字节区域。
在随后操作显示了这种强制转换的危害
*piPointer=1298;
将指针指向的地址赋值为1298而cItem并不能表示这么大的数,于是cItem后的地址内容会被赋值。如果cItem其后的地址是其他变量,那么本操作会改变其他操作的值。这就是c中常见的越界。
具体是修改先申请的变量还是后申请的变量,可以在cItem前后各申请一个4字节的数组,将数组初始化为零,最后查看数组的内容是否被修改

强制类型转换篇(三):java类型转换


    java基本类型的类型转换有三种:
        1、自动类型转换
        2、强制类型转换
        3、表达式类型的自动提升
    (1)自动类型转换
        
    由上图可以看出自动类型转换,其实是从小到大的转换。
    (2)强制类型转换
            如果将上图,反向转换,则需要强制类型转换。并且有可能损失精度。
    (3)表达式类型的自动提升。
            一个算术表达式中可能有多个类型数据进行运算,因此,按照自动类型转换,整个表达式都将转换成最高等级的类型,也就是最大的类型。然后进行运算。 
1
2
3
4  int a=3.4/2.1; 
 /*
 这个语句会报错,因为整个语句中最高等级的为double类型,因此右边将计算出一个double类型,而要将double类型赋值给int类型的a需要进行强制类型转换。如果不强制转换会报错。
 */             
本文出自 “夕下等花逝” 博客,请务必保留此出处http://sunshine2624.blog.51cto.com/3959438/1875607

强制类型转换

https://m.shanpow.com/xhy/498409/

推荐访问:
《强制类型转换.doc》
将本文的Word文档下载,方便收藏和打印
推荐:
下载文档
上一篇: 绰号的拼音
下一篇: doi查询
相关阅读数字歇后语 
热点推荐