• 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 // 指针的定义和赋值。
        其他情况尚未想到,如果哪位仁兄发现还有其他情况,辛苦辛苦指点下小弟。

  • 相关阅读:
    防止重复点击
    刷新当前页面的几种方法
    PHP删除数组中空值
    json转化数组
    两个不能同时共存的条件orWhere查询
    SQLSTATE[42000]
    laravel一个页面两个表格分页处理
    Hash::make与Hash::check
    unbind()清除指定元素绑定效果
    二级联动
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/11068691.html
Copyright © 2020-2023  润新知