c++ primer 学习笔记1_基本内置类型

 

2.1 基本内置类型

2.1.1 算术类型

c++语言中,算术类型分为两类,分别为整形和浮点型。整型包括整型,长整型,短整型。浮点型包括单精度浮点型和双精度浮点型。另外还有字符型和布尔类型等。在每种算术类型中都定义了固定类型的尺寸,比如int整型为16位,短整型short也是16位,字符型char8位,长整型long32.有些编译器容许的long  long64位。在浮点型中,float6位有效数字,而double10位有效数字,在c++11标准中的long double10位有效数字。

另外,值得注意的是,c++规定一个int至少与一个short一样大。一个long至少与一个int一样大,一个longlong至少与一个long一样大。

2.1.1-1

内置类型的机器实现

在计算机中,计算机以比特序列存储数据,每个比特是非01.也即是只有01.比如01101001010100.

大多数计算机以2的整数次幂个比特作为块来处理内存。最小的内存块,我们称作字节,存储的基本单元为字,一个字包括若干个字节。语法规定一个字节至少能够容纳下基本字符集中的字符。一般来说,一个字节由8比特组成。字由3264比特组成。也就是说一个字包括4个或8个字节。

2.1.1-2

带符号类型和无符号类型

我们说除去布尔类型以外,所以整型可以划分为带符号的和无符号的两种,带符号的可以表示正数,0,负数,而无符号的,可想而知只有正数了。通常我们所写的intshortlonglong long等都是带符号的,而如果想让他们变成无符号的类型,只需要在他们前面加上unsigned,比如unsigned int unsigned long。如果只写unsigned,那么表示的是unsigned int

和整型不同,字符型有三种表示,分别是charunsigned char, signed char。注意char signed char 是不一样的,其实char可以表示以上两种,具体哪个要看编译器了。

2.1.1练习

解答

1.int为整型,它是16位大小,short为短整型也是16位。Long longlong都是长整型,他们分别为32位和64位。有符号类型和无符号类型的区别是在整型里,有符号类型可以表示0,正数,负数。而无符号类型只能表示大于0的数。Floatdouble在内存中所占的比特数不同,float大概占32个比特。而double64比特或128比特。还有他们所表示的有效数字位数不同,float6位,double10位。

2.1.2

类型转换

显而易见,类型转换就是把一种类型转换成另外一种类型,这个比较简单,举个例子吧

bool b=42;这是b的值时1.注意b是布尔型啊!

int i=b;这时i1

i=3.14;这时i的值为3,注意i是整形,没有小数啊。

double pi=i;注意这是pi的值是3.0,为什么呢,因为double是浮点型啊,必须有小数。

Unsighed char c = -1; 大家注意这个就很奇怪了,我们知道无符号类型只能表示大于0的数,而如果把它输入进入,结果值是255?

Sighed char c2=256;这个是未定义的。。。

现在回答上面的问题,注意,如果我们赋给一个无符号类型值超出它的表示范围,那么它最终的结果是该值对他所表示的最大值加一那个数取模后的余数。

2.1.2-1

含有无符号类型的表达式

举例来说。比如一个表达式既有无符号数又有int值的时候,那么那个int值会转换为无符号数。比如

unsigned u=10;

int i=-42;

cout<<i+i<<endl;

cout<<i+u<<endl;

大家能想到它们的值是多少吗。感觉第一个是没有问题的,上过初中的都知道是-84,但是第二个麻烦就来了,显示的结果是4294967264.

这是为什么呢?

原因在于如果int与一个无符号数相加,那么int会转换成无符号数。就是把-42转成无符号的。就相当于这个-42加上这个无符号数的模。这个无符号数的模是4294967296+10.对吧?所以结果就是它加上-42。这下是不明白了??

如果不理解再来,

  unsigned u1=42,u2=10;

     cout<<u1-u2<<endl;

     cout<<u2-u1<<endl;

结果大家能想到吧,第一个结果是32,没问题,第二个结果是4294967264,为什么?跟上面一样的-42+4294967296+10.就行了。

2.1.2练习

Unsigned u=10,u2=42.

Cout<<u2-u<<endl;

Cout<<u-u2<<endl;

:第一个式子结果是32,第二个式子结果是4294967264

Int i=10,i2=42;

Cout<<i2-i<<endl;

Cout<<i-i2<<endl;

Cout<<i-u<<endl;

Cout<<u-i<<endl;

答:1):322):-323):04):0

2.1.3  

字面值常量

整型与浮点型字面值

我们把整型字面值可以写成十进制,八进制,十六进制等。以0开头的整数代表八进制,以0x开头代表十六进制。在默认情况下,十进制字面值是带符号的。八进制和十六进制是带符号或不带符号的。十进制字面值是intlonglonglong中最小的那个。注意十进制字面值不会是负数。默认的,浮点型字面值是一个double

字符与字符串字面值

由单引号括起来的是char型字面值。由双引号括起来的是字符串型字面值。字符串字面值是由常量字符构成的数组。在每个字符串结尾处添加一个空字符。。因此,其实际长度比他的内容多1.,比如'a'代表的是字符a。而“a”代表的是一个字符数组。这个数组里面有字符'a',和空字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值