类型转换——int转换成char(截短)

来源:互联网 发布:js查看某个属性值 编辑:程序博客网 时间:2024/04/29 00:01
转自:http://blog.sina.com.cn/s/blog_70ec9a6f010145wr.html
int a,b;  //keil c里的int,也就是16位。
a=0000; b=0x1234;

a=(char)(b);

 

int a,b;

这句的功能是操作系统为变量a,b分别分配一块空闲的存储空间。以后使用a,b将相当于访问各自所对应的存储空间。

 

a = 0000;b = Ox1234;

这句的功能是把0000放到变量a所对应的存储空间,把0x1234放到变量b所对应的存储空间。

 

重点是下面这句a = (char)(b)

它的功能相当于修改变量a的值。具体是这样操作的:

b所对应的存储空间中取出b的值即0x1234,然后把他转换成char类型,再然后将转换后的结果放到变量a所对应的存储空间,即覆盖掉原来的0000

这个转换后的结果又是多少呢,是这样算的通常在Cint类型占4个字节  char类型占1个字节如果把一个int类型的数据以char类型输出,那么,编译器会自动丢弃int类型的前3个字节的内容。对应本题int类型的数据b0X1234,为十六进制,在计算机中是这样存储的:

               0000 0000 0000 0000 0001 0010 0011 0100

4个字节。转换成char类型后,前3个字节丢弃,即结果是

0011 0100 

1个字节,对应的十进制是52

 

当语句a = (char)(b)执行完后,这1个字节的值也就是52就放到了变量a所对应的存储空间,而不是原来的0000了。

 

所以,整个过程并没有改变变量ab的数据类型,原来是int类型现在还是int型,程序只是修改了变量a的值,连b的值都没有修改,因为修改a的值时只是从b所对应的存储空间里把b的值取出来用一用,用的结果是修改成char类型,但他把修改后的结果放到a所对应的存储空间了,并没有放到b所对应的存储空间,所以原来b所对应的值没有被覆盖,原来是0X1234,现在还是0X1234
0 0
原创粉丝点击