转自:/s/blog_70ec9a6f010145wr.html int a,b;
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。
这个转换后的结果又是多少呢,是这样算的通常在C中int类型占4个字节
共4个字节。转换成char类型后,前3个字节丢弃,即结果是
0011 0100
共1个字节,对应的十进制是52
当语句a = (char)(b)执行完后,这1个字节的值也就是52就放到了变量a所对应的存储空间,而不是原来的0000了。
所以,整个过程并没有改变变量a和b的数据类型,原来是int类型现在还是int型,程序只是修改了变量a的值,连b的值都没有修改,因为修改a的值时只是从b所对应的存储空间里把b的值取出来用一用,用的结果是修改成char类型,但他把修改后的结果放到a所对应的存储空间了,并没有放到b所对应的存储空间,所以原来b所对应的值没有被覆盖,原来是0X1234,现在还是0X1234。