short x=-4321 //1110 1111 0001 1111
unsigned short y=(unsigned short)x //1110 1111 0001 1111
进行强制类型转换后,不改变数据内容本身,只改变解释方式
以有符号数解释为-4321,而以无符号数解释为61215
长整数变短整数
int a=165537; //0x000286a1
b=-34991; //0xffff7751
short c=(short)a; //0x86a1 以补码规则解析真值-31701
d=(short)b; //0x7751 真值+30545
short会直接将两个字节的高位截断,只保留低两个字节
在此处补充一下一种大小端存储的判断方式,以便日后复习
#include<stdio.h>
//小端存储:低地址存放最低有效字节(LSB)例如01H,大端存储:低地址存放最高有效字节(MSB)例如00H
int main(){
int i=1; //0x00000000 00000000 00000000 00000001
// 1. &i取i的地址,2. (char*)取i的最低字节地址 3. *(char*)&i,解引用,取得该地址存储的值
char c=*(char*)&i;
if(c){
printf("小端\n");
}else{
printf("大端\n");
}
return 0;
}
//输出: 小端
边接对齐:本质就是空间换时间,提升运行效率
K字节大小的数据必须要存储在K的整数倍的地址上
结构体最终大小是其内部最大数据类型的整数倍,不足则需要填充