字节也叫Byte,是计算机数据的基本存储单位,一个Byte是由8个bit组成,bit存储内容是0和1,它是最小的可寻址单元 ,1个字节等于8位二进制。1B(Byte)=8b(bit)
在ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间,一个字节是8位,一个汉字编码两个字节是十六位。英文标点占一个字节,中文标点占两个字节。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值:0 最大值:255 。如一个ASCII码就是一个字节。
二进制占一个bit; 八进制占三个 bit; 十六进制占四个bit; 十进制一般按实际来算,7以下占3个,8,9占4个。
例如:{0x62}是16进制,对应二进制为“0110 0010”
1、整型
1、int型占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]
unsigned int 表示无符号整数,数据范围为[0~2^32-1]
除了int类型之外,还有short、long、long long类型可以表示整数。
2、短整型类型说明符为short int或short。所占字节和取值范围会因不同的编译系统而有差异。在32位机中,short int占4个字节。但总的来说,short int 至少16位,也就是2个字节。
3、长整型类型说明符为long int或long ,在内存中占4个字节,其取值为长整常数。在任何的编译系统中,长整型都是占4个字节。在一般情况下,其所占的字节数和取值范围与基本型相同。
4、long long 为64位整数类型,一般的long long为64位,由于负数补码的原因,第一位作为符号位,因此有63位可用。则取值范围为-2^63到2^63-1 。或者考虑无符号的unsigned long long 不能表示负数但是可以到2^64-1 具体取值18446744073709551615. 18后面18个0,1.84*10^19
2、整数在计算机中的表示
整数在计算机中是以二进制补码的方式表示的,以int型为例:
int有4个字节,最高位为符号位,即正数为 0xxx xxxx xxxx xxxx xxxx xxxx xxxx xx11 b ,例如:
<span style="font-size:18px;">int n = 3;</span>
正数的补码还是它自身。在计算机里存储为 0000 0000 0000 0000 0000 0000 0000 0011b;
负数存储为: 1xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx b,
负数的补码求法:取反加一,即将该负数的绝对值按位取反,然后加1,
后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001) 所以-7的补码是11111001。
例如:
<span style="font-size:18px;">int n = -3;</span>
在计算机里存储为1111 1111 1111 1111 1111 1111 1111 1101b;
3、字符型
char类型变量的大小通常为1个字节(1字节=8位),且属于整型。整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型,如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。
同样,在32位系统中一个char类型一般为8个bit,所以能存储的数据范围为-128~127,而unsigned char则是0~255,字符型所存储的数据是用来表示字符的,opencv中像素的值一般都是uchar型。
char实际上也是一种int,这样说可能有点错误,但是你可以这么理解,因为每个字符的编码实际上也是用整型编的。如果你将它强行转换为整型,是可以转的,很多时候,我们都会将char转成整型来计算或比较。举个简单的例子'A'=96;还有一些特殊的,比如我们的回车键,那个字符转了之后是13,很多时候我们要回车的时候,但是又打不出来,我们就可以(char)13就行了。还有退格键(char)8 也是这个道理。
4、int型转换为char和unsigned char
因为char 和unsigned char型都是一个字节,int型是四个字节的,从int 型到char 或 unsigned char型的转换都是直接将int的最低字节赋予char 或 unsigned char;例如:
char c = 3;
unsigned char uc= 3;
3是int型,其在计算机里的存储为0000 0000 0000 0000 0000 0000 0000 0011b;所以 c 和 uc 在计算机里的存储都为 0000 0011b,由于是正数,故值都为3;
有例如:
char c = -3;
unsigned char uc= -3;
-3是int 型,存储为1111 1111 1111 1111 1111 1111 1111 1101b; 所以c和uc在计算机里的存储都为1111 1101b;
由于char是有符号的,unsigned char 是无符号的;char c的最高位为符号位,符号位1表示负数,0表示正数,所以c的值为-3;而unsigned char uc是无符号的,所以值为253;
5、char和unsigned char 转换为int 型
把char转换为int时,结果还是char的数值,char的取值范围是0-255,在这个范围内char和int是可以通用的,char可以随时转换为int,由于char或者unsigned char是一个字节的,int型是四个字节的,当char 或者 unsigned char向int 型转换的时候,高的三个字节计算机怎么处理呢?
1、因为char是有符号的,所以int 的高三个字节都是以char的最高位(符号位去填充),例如:
当c是char型,并且在计算机里存储为1111 1101b时,d是char型,并且在计算机里存储为0000 0011b时,
int n = c;
int m=d;
n在计算机里的存储为:1111 1111 1111 1111 1111 1111 1111 1101b,
m在计算机里的存储为:0000 0000 0000 0000 0000 0000 0000 0011b;
2、因为unsigned char 是无符号的,所以int 的高三个字节都是以0填充,例如:当uc是unsigned char型,并且在计算机里存储为1111 1101b时,
int n = uc;
n在计算机里的存储为:0000 0000 0000 0000 0000 0000 1111 1101b。
6、字符串类型
参考博文:https://blog.csdn.net/yifeiboss/article/details/52206072