#include <stdio.h>
int main(){
short i;
unsigned short j;
i = -1;
j = -1;
printf("%d\n", i);
printf("%u\n", j);
return 0;
}
// 64位windows下输出结果:
// 上诉代码种第一个输出为-1, 第二个输出为65535
// 上面代码之所以会有65535这个结果,是因为j是无符号短的整数,并且short int占两个字节,所以按照补码转换,并且一个字节是8个比特位,所以总共是16个比特位,
// 首先应该先写:1000000000000001,然后除去左边符号位以外的所有数值取反得到1111111111111110,最后加一得到:1111111111111111。此时如果是有符号位,
// 这个值表示-1的二进制,但是这里使用了无符号,所以此时的符号位被看出正常数值,所以转化为整数十进制后得到(2^16)-1,所以为65535
// 限定符:signed和unsigned
// 用于限定char类型或者任何整型变量的取值范围
// signed: 表示该变量带符号位,这里可以理解可以存放负数
// unsigned:表示该变量不带符号位,只能存放0或者正数
// 加上限定符后,int数据类型就从原来四种变成八种了
// [signed] short [int]
// unsigned short [int]
// [signed] int
// unsigned int
// [signed] long [int]
// unsigned long [int]
// [signed] long long [int]
// unsigned long long [int]
// 上面中括号的signed代表默认值,可以写也可以不写,如果要使用其他非中括号种的值,则需要写上对于的限定符或者描述符号
// 格式化无符号的数据使用%u作为占位符