C++ int型与char型辨析

        字节也叫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、字符串类型

转到:C++字符串的不同存放类型



参考博文:https://blog.csdn.net/yifeiboss/article/details/52206072

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值