《C++ Primer第四版》学习笔记(三)变量和基本类型 之 基本内置类型

引言:
类型确定了数据和操作在程序中的意义。比如普通的加号:
i = i + j;
有不同的含义,具体含义取决于 i 和 j 的类型。如果 i 和 j 都是整形,则这条语句表示一般的算数“+”运算;如果 i 和 j 都是类的对象,则这条语句是将这两个对象的组成成分分别加起来。
C++对类型的支持是非常广泛的:语言本身定义了一组基本类型和修改已有类型的方法,还提供了一组特征用于自定义类型。

基本内置类型包括: 算数类型(arithmetic type)和 void类型

(一)算数类型


包括:整数、浮点数、单个字符、布尔值。其中 整数、字符 和 布尔值 的算数类型合称为 整型
所以: 算数类型包括整型和浮点型。

类型含义最小存储空间
bool布尔型——
char字符型8位
wchar_t宽字符型16位
short短整型16位
int整型16位
long长整型32位
float单精度浮点型6位有效数字
double双精度浮点型10位有效数字
long double扩展精度浮点型10位有效数字

注:算数类型的存储空间依机器而定。这里的存储空间指用来表示该类型的二进制(bit)位数。C++标准规定了每个算数类型的最小存储空间,但它并不阻止编译器用更大的存储空间。事实上,对于int类型,几乎所有的编译器使用的存储空间都要比所要求的大。
要让某个地址中的自己具有意义,必须要知道存储在该地址的值的类型,否则我们无法判断存储在一段内存空间上的二进制代码如何翻译,例:假设内存空间736425 存储的二进制为:01110001 ,如果知道地址位736425的字节的类型是8位无符号整数,那么就可以知道该字节表示整数112,如果这个字节是ISO-Latin-1字符集中的一个字符,那它就表示小写字母q。虽然两种情况存储在内存空间的位一样,但是因为归属于不同的类型,解释也就不同。
参考书中 P31,<内置类型的机器级表示>很重要。

1.整型

一般情况下,short:半个机器字长(word),int:一个机器字长,long:一个或者两个机器字长,根据不同的机器不同。

(1)关于带符号类型和无符号类型。

除了bool类型外,整型可以是带符号的(signed),也可以是不带符号的(unsigned)。
int、short和long默认为带符号型,如要获得无符号型只能显示添加unsigned。

书上第32页指出:
     和其他类型不同,char又三种不同的类型:普通char、unsigned char 和 signed char。虽然 char 有三种不同的类型,但是指具有两种表示方法。可以使用unsigned char或者signed char表示char类型,使用那种char表示方式由编译器决定,也就是说当我们在编译器上写明。
理解起来有些费解,经研究得知:程序里直接写一个int,默认是signed int,但是在程序中写char,就没有默认了,具体是signed char 还是 unsigned char取决于你的编译器,可以测试:
#include<iostream>
int main()
{
     char c = 1;
     printf("c = %d\n",c);
     return 0;
}
如果测试结果是 1 ,则被编译位为 signed char,如果是255,则被编译位unsigned char,在我的电脑上,vc6.0 编译为signed char。

(2)整型值的表示。

unsigned类型中,所有的位都表示数值。
signed 类型,c++并未规定如何表示,具体决定于编译器。例如1 Byte = 8 bit,取值范围至少是 -127 到 127(例如反码表示),也有的实现 -128 到 127(补码表示)。
具体值的表示涉及到 原码、反码、补码等知识,可以查询相关知识补充理解。

(3)整型的赋值。

当我们将一个超出其取值范围的值给一个制定类型的对象时,会发生什么?答案取决于是 signed 还是 unsigned。
unsigned:
C++中,这种操作合法,其结果是该负数对该类型的取值个数求模后的值。
#include<iostream>
int main()
{
     unsigned int ui = 1;
     std::cout << ui << std::endl;
     return 0;
}
2 的 32 次方 :4294967296
我的编译器输出:

signed:
超出范围的处理方式取决于编译器,有些编译器会做类似于上述unsigned的处理。
#include<iostream>
int main()
{
     unsigned int ui = 4294967297;
     std::cout << ui << std::endl;
     return 0;
}

2. 浮点型

使用double类型基本上不会有错。
参考 《C++ primer 中文版》第四版 第32 页、33页,很重要。

(二)void类型

     void类型其实是一种用于语法性的类型,而不是数据类型,主要用于作为函数的参数或返回值,或者定义void指针,表示一种未知类型。(书中未详细讲解,待以后详细分析)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值