关于 signed 和 unsigned int
在计算机解析在这个数的时候认为它存在符号位或者不存在符号位。
(1)判断一个机器的大小端
#include<stdio.h>
#include<stdlib.h>
#if 1
int check_sys()
{
int i = 1;
return (*(char *)&i);
}
int main()
{
int ret = check_sys();
if (1 == ret)
printf("小端\n");
else
printf("大端\n");
system("pause");
return 0;
}
看一个机器是大端还是小端就要看它里面数据的存储方式,小端是低位存在底地址中,可以看到将int *强转成char *,那么机器只会读一个字节八个比特位。然后解引用,看其实0还是1.
在这强调一句话,提升补得是符号位。
char a = -1;
signed char b = -1;
unsigned char c = -1;
printf("%d,%d,%d\n", a, b, c);
printf("%x,%x,%x\n", a, b, c);
printf("%u,%u,%u\n", a, b, c);
//char 的-1是8个1 输出int 有符号时是整型提升补符号位,即补26个1,输出是-1
//signed char 是有符号 还是1111 1111 和上面的一样
//unsigned char 首先进行截断,1111 1111 输出时整型提升 无符号 那么补28个0
//输出255
//输出无符号整数时,最高位不能当做符号位,当成普通的位
char a = -128;
char b = 128;
//128 1000 0000
//-128 11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000000
//首先截断,都是1000 0000,无符号补24个0
printf("%u,%u\n", a, b);
int i = -20;
unsigned int j = 10;
printf("%d\n", i + j > 0);
unsigned 与signed 相加的时候结果视为unsigned。