3.数据类型
整数类型
整数数据包括:
int 4字节 0~0xFFFFFFFF
long 4字节 0~0xFFFFFFFF
short 2字节 0~0xFFFF
char 1字节 0~0xFF
当前面的int、long、short、char、这些被称为关键字,同时这些关键字会规定你所要声明的数据的宽度(空间大小),所以当你所输入的数据大于你所规定的数据宽度,这部分数据就会溢出,那么程序会对这个溢出的数据做出怎样的操作呢?
实验如下:
//定义一个char类型的数据,赋值一个超出其数据宽度的值,看输出多少
int main(){
unsigned char x=0xff;
printf("%x %d\n",x,x);
x=0xff1;
printf("%x %d\n",x,x);
x=0x1ff;
printf("%x %d\n",x,x);
return 0;
}
结果只有1,3行两个输出的结果相同,可以看出,当输入的内容大于了改数据的宽度时,程序会将数据以16进制的进行高位删除的,最后结果保留,溢出几位就删除几位高位同时保留几位低位。
补充一下,数据就是以二进制机械码的形式的存在与计算机中,而二进制对于我们来说太繁琐,一个内存单元就可以存储8位二进制,而在汇编中,通常将这些二进制转化16进制,相当于为每一个4位的二进制进行取名,方便人们识别。
原码、反码和补码
原码就是直接将该数据以二进制的转化出来的二进制机械码;
反码就是就是令符号位不变,其余位取反(符号位就是二进制中的最前面的那位)
补码就是在反码的基础上+1
我们知道在计算机中,数据是以二进制的形式存储的,但是上面这个表中只表示了正数,那负数呢?于是前人们的智慧就彰显出来了,将数据分为无符号(unsigned)和有符号(signed)两种形式,并规定通过不同的规则表达该数据是无符号还是有符号。
==无符号==就是其身的原码,同时其补码,反码,还有原码都是一样的。
==有符号==取其补码。其原码的符号位根据正数为0,负数为1的规则进行编写,然后符号位不变其余位取反,最后+1得到其补码,也就这个数的机械码。