1.判断大小端
#include <sdtio.h>
int check_sys()
{
int i = 1;
if (*(char*)&i == 1)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int ret = check_sys();
if (ret = 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
对函数化简得:
#include <stdio.h>
int check_sys()
{
int i = 1;
return *(char*)&i;
}
int main()
{
int ret = check_sys();
if (ret = 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
总结:定义一个int类型,用char*强制转换,取出它低字节序的一个字节的内容,判断是否为1或0,若为1则证明低地址处存放的是低字节序的内容,判断为小端,若为0,则相反;
2.判断如下代码a的结果
int main()
{
char a = -128;
printf("%u", a);
return 0;
}
a=4294967168,为解释如下
int main()
{
//char -128~127
char a = -128;
//10000000000000000000000010000000
//11111111111111111111111101111111
//11111111111111111111111110000000 - 截断
//10000000 - a
//11111111111111111111111110000000 - 提升
//
printf("%u\n", a);
printf("%d\n", a);
//11111111111111111111111110000000
//10000000000000000000000001111111
//10000000000000000000000010000000
//-128
//
//
//%u - 打印无符号整数
//
return 0;
}
3.判断如下代码i的结果
int main()
{
int i = -20;
unsigned int j = 10;
printf("%d\n", i + j);
return 0;
}
i=-10,解释如下
int main()
{
int i = -20;
//10000000000000000000000000010100
//11111111111111111111111111101011
//11111111111111111111111111101100 - -20的补码
//
unsigned int j = 10;
//00000000000000000000000000001010
printf("%d\n", i + j);
//11111111111111111111111111101100
//00000000000000000000000000001010
//11111111111111111111111111110110 - 补码
//10000000000000000000000000001001
//10000000000000000000000000001010 -> -10
//
return 0;
}
5015

被折叠的 条评论
为什么被折叠?



