一个char的长度是8位字节。我们可以通过把一个数据的地址强制转化成char*类型从而起到逐个字节查看机器码的目的。下面的实验看出,数据在机器中以补码的形式存储。
int main()
{
long long a;//%lld
//short a;//%hd+输出cp+1
printf("please input a number:");
scanf("%lld",&a);
//scanf("%hd",&a);
//unsigned char a;//输入10&-10(补码F6)
//int a;//输入10
//scanf("%d",&a);
unsigned char* cp=(unsigned char*)&a;
printf("cp =%p =%X \n",cp,*cp);//低地址放低位值
printf("cp+1 =%p =%X \n",cp+1,*(cp+1));
printf("cp+2 =%p =%X \n",cp+2,*(cp+2));
printf("cp+3 =%p =%X \n",cp+3,*(cp+3));
printf("cp+4 =%p =%X \n",cp+4,*(cp+4));//低地址放低位值
printf("cp+5 =%p =%X \n",cp+5,*(cp+5));
printf("cp+6 =%p =%X \n",cp+6,*(cp+6));
printf("cp+7 =%p =%X \n",cp+7,*(cp+7));
return 0;
}
输入10,我们得到以下结果。低地址位存放的是低位值,验证了机器小段存储的特点。
输入-10,我们可以看到,此时指针指向的的是F6,也就是-10的补码。