前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++第二章 变量与基本类型

C++第二章 变量与基本类型

原创
作者头像
yzh
修改2020-09-11 18:19:21
8860
修改2020-09-11 18:19:21
举报

1. 位与字节

位:计算机的基本存储单位是位(bit)。

位可以简单的看作开关。其中,0表示关,1表示开。

8位的内存块可以设置为256种不同组合。(2的8次方)

8位单元的表示范围为0-255, -128-127

字节:(byte)

字节是指8位的内存单元。字节是计算机内存量的度量单位。

1字节 = 8位

1KB = 1024字节

1MB = 1024KB

2. 基本内置类型

c++中的类型检查发生在编译阶段,因此编译器必须知道程序中每一个变量所对应的类型。

创建变量或者常量时,指定对应的数据类型,以便分配内存。

C++基本内置类型图
C++基本内置类型图

Tips1:如何选择类型 关于如何选择类型的一些准则

  • 知道数据不可能为负的情况,用unsigned。
  • 若int范围不够用,跳过long(long一般和int有一样的尺寸),直接选用long long。
  • 在算数表达式中不要使用char或者bool,只有在存放字符或布尔值时才使用它们。因为不同机器对char是有符号还是无符号的解释可能不一样。若有需要,请使用signed char或者unsigned char。
  • 浮点数直接用double,没必要用float(float精度不够,而且双精度浮点数和单精度浮点数的计算代价相差无几)

2.1 基本类型注意事项:

整型:64位编译系统,一般占内存如下所示:

char 1个字节

short (int) 2个字节

int 4个字节

long (int) 4个字节

long long (int) 8个字节

超出内存时,减去边界值,重新计算。

此外,整型分为有符号和无符号类型。无符号类型可以增大变量能够存储的最大值。

浮点型:

主要用于表示小数,两者的区别在于表示小数的有效数字不同。

float 单精度 4个字节

double 双精度 8个字节

float的定义

float f = 0.1f;

科学计数法表示小数:

 float f1 = 3e2;   //3 * 10^2
 float f2 = 3e-3;   //3 * 10^(-3)

float 与double的比较

#include <iostream>
using namespace std;
int main()
{
    double a = 0.0001;
    float b = 0.0001;
    if(a == b)
    {
        cout << "a = b" << endl;
    }
    else if(a > b)
    {
        cout << "a > b" << endl;
    }

    else if(a < b)
    {
        cout << "a < b" << endl;
    }
    return 0;
}

后缀表示类型:

l L 后缀表示该整数为long类型

u U后缀表示为unsigned int 类型

3. 类型转换

4. 取模与取余的区别

取模运算(“Modulo Operation”)和取余运算(“Remainder Operation”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。取模主要是用于计算机术语中。取余则更多是数学概念。

对于整型数a,b来说,取模运算或者求余运算的方法都是:

       1.求整数商: c = a/b;

       2.计算模或者余数: r = a - c*b. 求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。

       例如:计算-7 Mod 4

       那么:a = -7;b = 4;

       第一步:求整数商c,如进行求模运算c = -2(向负无穷方向舍入),求余c = -1(向0方向舍入);

       第二步:计算模和余数的公式相同,但因c的值不同,求模时r = 1,求余时r = -3。

       归纳:当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。

       当符号不一致时,结果不一样。求模运算结果的符号和b一致,求余运算结果的符号和a一致。

       另外各个环境下%运算符的含义不同,比如c/c++,java 为取余,而python则为取模。

  通常,取模运算也叫取余运算,它们返回结果都是余数.

rem(取余)和mod(取模)唯一的区别在于: 当x和y的正负号一样的时候,两个函数结果是等同的;当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。

取模运算的简便理解

 取模运算时,对于负数,应该加上被除数的整数倍,使结果大于或等于0之后,再进行运算.

  也就是:(-1)%256 = (-1+256)%256=255%256=255

4. 变量定义:

5. 变量声明与定义的关系:

6. 作用域:

7. 复合类型

空指针:

最好使用nullptr, 避免使用NULL

7.1 指针与引用的区别:

指针

指针本身就是一个对象,可以赋值,可以拷贝.在指针的生命周期内可以先后指向几个不同的对象.

指针无需在定义时赋值.

int *p  p是指向int类型的指针

引用:

引用是为对象起了另外一个名字.引用在定义时,程序将引用和它的初始化对象绑定在一起.

因此引用无法重新绑定其他对象,引用必须初始化.

int a = 2;
int *p = &a;//p中存放的a的地址, p是指向变量a的指针
//解引用就会获取指向的对象
*p = 3;  //即a的值变成3
解引用仅适用于那些确实指向了某个对象的有效指针.

7.2 const对象必须初始化

指针本身是一个对象,指针又可以指向一个对象.

指针本身是一个常量称为顶层(top-lever const).

顶层const可以表示任意的对象是常量,适用于任意数据类型.如算数类型,类,指针

指针所指向的对象是一个常量称为底层(low-lever const)

底层const与指针和引用等复合类型的基本类型有关.

const int a = 1;         //顶层
int *const b = &a;       //顶层
const int *c = &a;       //底层

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 位与字节
  • 2. 基本内置类型
    • 2.1 基本类型注意事项:
    • 3. 类型转换
    • 4. 取模与取余的区别
    • 4. 变量定义:
    • 5. 变量声明与定义的关系:
    • 6. 作用域:
    • 7. 复合类型
      • 7.1 指针与引用的区别:
        • 7.2 const对象必须初始化
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档