C++学习 之 初识变量和基本类型 之 内置类型

声明
            本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方。 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予批评与指正!不胜感激!
            学习的过程分为初识、入门、进阶三个阶段。
            因为对C++没有什么了解,这样的学习设定可能也有失准确性。望兄弟们多指点。谢谢!




科普:有效数字

     有效数字是指一个数,从左边第一个非0数开始到末位最后一个数字 ,都被称为这个数的有效数字。比如0.009900,左边第一非0数字为9,后面还有3个数字,这4个数字都是有效数字。

1. 主要内置数据类型
      还记得我们在初识C++时写的hello world么? 那几行代码中,我们见到过这样一个单词:int 。当时我只是简单说了下,这是C++的一种内置数据类型。今天我们来一起学习下C++都有哪些内置数据类型,都有什么特点。
   
   1.1 首先我们来了解下,C++都定义了哪些数据类型
       C++ 定义了一组表示整数、浮点数、单个字符和布尔值的算术类型。另外还定义了一种特殊类型:void。
       void 类型没有对应的值,通常用作无返回值函数的返回类型。
       这几种类型呢,在C++中又可以分成两大类:整型和浮点型(void类型除外)。 
       我们从以下几个方面来分析数据类型:
       定义方式及表示方式
       C++最小请求内存空间--存储空间
       对于整型还涉及是否带符号
       赋值

  1.2 整形和浮点型  

      1.2.1 整型

       整型根据不同的依据可以进行不同的分类。比如根据数据类型可以分为:整数,单个字符,布尔类型 ; 可以根据是否带符号分为:带符号与不带符号的类型。

      分类一:整数、单个字符、布尔类型
       数字
       定义方式:int a=1; short a=1; long a=1;
       不同类型的存储空间:
       比如int:16位操作系统是2个字节,32/64位操作系统4个字节,也就是32bits,
       比如long:64位操作系统,除了受到机器位数的影响,还受到数据模型(不是数据库的数据模型)影响,LLP64模型中long是32位外,LP64、ILP64、SILP64的long都是64位。
       我们这里所说的最小存储空间,是指综合不同处理能力的CPU(比如32位的64位的)以及数据模型进行对比的,某个数据类型所需要的最小空间。比如int 类型,最小存储 空间是2个字节(16 bits), 如果请求的空间小于这个值,就会报错,而当前计算机的运行能力,一般分配给int类型的存储 空间为4个字节(32位),而空间的分配,是编译器自动分配的,不需要人为参与。至于自定义数据类型的空间如何分配,等 以后我们学到了,再去了解。
          int   16bits
          short 16bits
          long  32bits

       单个字符
       定义方式:char a='a';  wchar_t a='我';
       最小请求存储空间:
          char    8bit
          wchar_t 16bit

       布尔类型
       定义方式: bool a = true; boll a=false;在程序里,true 返回1,false 返回0;
       最小请求空间:无。
       
       
       分类二:带符号与不带符号的类型
       除布尔类型外,其他整型值都可以分成带符号的或者不带符号的
       
       整数:
       带符号类型可以表示所有整数(包括负整数,0,正整数),不带符号的,只能表示非负整数。而默认情况下,都是带符号的(signed),如果想定义为不带符号的(unsigned) 类型则需要使用关键字unsigned
       
       定义方式:unsigned (int) ,unsigned short unsigned long. 
           注意: unsigned int 中的int 可以省略,也就是说unsigned 默认表示为 不带符号的int类型。
           
       至于字符类型:
       也分为带符号的与不带符号的。但是与整数不同,字符类型分为plain char,unsigned char,signed char 虽然分为三种类型,却只有两种表示方式。你肯定要问为什么了。两种表示方式肯定是unsigned 和 signed的两种。那plain char又是什么呢?
       plain char 只是一种称谓,它可以是signed char 也可以是unsigned char,那到底是哪个呢?这具要默认由编译器来决定,当然你也可以自己决定 ,g++ 编译器有4个参数:
       -funsigned-char
       -fno-signed-char
       -fsigned-char
       -fno-unsigned-char
       前两个参数将char类型设置成unsigned char,后两个参数告诉编译器将char类型全部识别为signed char
       
       取值范围:
       无符号类型,所有位数都表示数值,带符号类型,策略上保留一位用作符号位,符号位为1为负数,0则为非负数。
       正是因为符号位的存在,导致带符号类型与无符号类型数值的取值范围存在差异。
       带符号类型被分配16位空间,取值范围为:-2 -15次方(至少是-2 -15次方加1)至2的15次方减1,而不带符号类型,取值范围为0至2的16次方减1。
       假如int被分配出8位的空间,不带符号的取值范围为-127~127(有的环境里可以取到-128),带符号的取值范围为0~255.
       
       赋值:
       关于整型的赋值,我们这里只说下整数的赋值。赋值在某个类型的取值范围内,那赋值很简单,比如:unsigned a=254;
       但是如果越出了取值范围呢?要分是否带符号进行分别对待
       不带符号的情况 :
       假设在8位的存储空间中,取值范围是0~255,如果是256怎么办呢? C++中会对两个值进行加减运算。如果大于255则进行减法运算(赋值-最大值),如果小于0,则进行加法运算,比如-1,赋值的结果,会是254,相当于-1+255
       带符号的情况:
       一般情况下,带符号的类型,赋值超出取值范围,会像不带符号的类型那样进行加减运算,但是并不一定所有编译器都会是这样的处理的。

       

       
      1.2.2       浮点型
       
       类型 float、 double 和 long double 分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。一般 float 类型用一个字(32 位)来表示,double 类型用两个字(64 位)来表示,long double 类型用三个或四个字(96 或 128 位)来表示。类型的取值范围决定了浮点数所含的有效数字位数。

2. 字面值常量(2014-07-14更新)
1. 什么是字面值常量
   痛苦死啊~对于字面值常量这一节,两个星期前就看了几遍,可是就是不是很明白到底是什么东西。放了两个星期,今天再来看,思路已经有些很清晰了。
   其实字面值常量,是未定义而被直接使用的内置基本类型(除short类型外),其特点是不能修改,用值本身进行命名。
   需要注意的是: 只有内置数据类型有字面值常量,没有类类型的字面值常量,所以也没有标准库字义的字面值。内置类型中,没有short类型的字面值
2. 字面值常量的表现形式(ASCII)
     十进制: 20
     八进制: \024   -- ASCII 用 8进制 表示需要以\ 开头
   十六进制: \x14   -- ASCII 用16进制 表示需要以\x开头

3. 字符与字符串
   单个字符 需要以单引号: '' 来引用
   字符串   需要以双引号: "" 来引用 ,为了兼容 C 语言,C++ 中所有的字符串字面值都由编译器自动在末尾添加一个空字符
   如:'A' 就是字符A,"A" 则是单字符A+空格 两个字符。

4. 整型的不同使用方式

类型 表现方式
int(整数类型中默认为Int 或long 根据字面值大小自动决定) 变量: int a=1;      常量:1
short 变量:short int a;  常量:
long 变量:long int a;   常量:1L(L 可以是小写,但是建议使用大写,小写容易与数字1混淆)
char 变量:char n='a';   常量:'a'
wchar_t 变量:wchar_t n;   常量:'a'L
float 变量:float n;          常量:0.1314f 或者0.1314F
double(浮点类型中默认为double) 变量:double n;     常量:0.1314
long double 变量:long double n; 常量:0.1314L
布尔 true 或者 false
不带符号(我们知道默认是带符号的) 10u(不带符号的整型) 、10Lu(不带符号的长整型)、 10LU(不带符号的长整型)


5. 字符(串)连接

std:cout<<"Hello " "world"<<endl; 输出结果等价于:<br="">
std:cout<<"Hello world"<<endl;  输出结果等价于:<br="">
std:cout<<"Hello " 
"world"<<endl;                          输出结果等价于:<br="">
std:cout<<"Hello " <<"world"<<endl;  输出结果等价于:<br="">

std:cout<<"Hel\               
lo w\
orld"<<endl;  
注意反斜线符号必须是该行的尾字符——不允许有注释或空格符。同样,后继行行首的任何空格和制表符都是字符串字面值的一部分。正因如此,长字符串字面值的后继行才不会有正常的缩进   

6. 字面值常量会在什么情况下出现

   std::cout // 指针的定义和赋值。
    其他情况尚未想到,如果哪位仁兄发现还有其他情况,辛苦辛苦指点下小弟。

posted @ 2019-06-22 14:11  halberd.lee  阅读(528)  评论(0编辑  收藏  举报