在进行大的转小的的时候会发生截断,将高位字节去掉,剩下的内容存放在小内存里
例如:int 型转char型,只会保留低地址的一个字节,高地址的三个字节被舍弃
例题:char a='1';char只能保存00000001这八个bite位.
指针类型进行转换时不会舍弃,要注意指针是指向一块内存空间将指针类型进行强转之后只会改变这个指针所指向的内存空间的大小.
例如:int arr[10]=0; int*p=arr 这个表示p可以代表整个数组并且指向数组arr的首地址,如果进行指针+1操作,p指向的地址会往后移动四个字节.
进行强转short*pp=(short*)arr;此时,pp指向的依然是整个数组,只是在进行pp+1操作后指针向后移动两个字节.
例如:int a=100; char b=(char)a;(此处进行高位舍弃操作)printf("%x",b);(此处会有小内存转成大内存发生)
b本来一个字节,在%x下进行读取四个字节进行打印16进制位,会补齐三个字节的高位,符号位是什么补什么.,有符号位的转有符号位的按符号位进行补.
如果无符号位的数转有符号位的数,如:char a=128;发生截断后第一个数变成符号位.
有符号位的数转成无符号位的数,结果就是无符号位的数,这种补位直接补零.