zoukankan      html  css  js  c++  java
  • 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
         八进制: 24   -- 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 // 指针的定义和赋值。
        其他情况尚未想到,如果哪位仁兄发现还有其他情况,辛苦辛苦指点下小弟。

  • 相关阅读:
    [LeetCode 1029] Two City Scheduling
    POJ 2342 Anniversary party (树形DP入门)
    Nowcoder 106 C.Professional Manager(统计并查集的个数)
    2018 GDCPC 省赛总结
    CF 977 F. Consecutive Subsequence
    Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
    Poj 2337 Catenyms(有向图DFS求欧拉通路)
    POJ 1236 Network of Schools (强连通分量缩点求度数)
    POJ 1144 Network (求割点)
    POJ 3310 Caterpillar(图的度的判定)
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/11068691.html
Copyright © 2011-2022 走看看