位:计算机的基本存储单位是位(bit)。
位可以简单的看作开关。其中,0表示关,1表示开。
8位的内存块可以设置为256种不同组合。(2的8次方)
8位单元的表示范围为0-255, -128-127
字节:(byte)
字节是指8位的内存单元。字节是计算机内存量的度量单位。
1字节 = 8位
1KB = 1024字节
1MB = 1024KB
c++中的类型检查发生在编译阶段,因此编译器必须知道程序中每一个变量所对应的类型。
创建变量或者常量时,指定对应的数据类型,以便分配内存。
Tips1:如何选择类型 关于如何选择类型的一些准则
整型: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 类型
取模运算(“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
空指针:
最好使用nullptr, 避免使用NULL
指针
指针本身就是一个对象,可以赋值,可以拷贝.在指针的生命周期内可以先后指向几个不同的对象.
指针无需在定义时赋值.
int *p p是指向int类型的指针
引用:
引用是为对象起了另外一个名字.引用在定义时,程序将引用和它的初始化对象绑定在一起.
因此引用无法重新绑定其他对象,引用必须初始化.
int a = 2;
int *p = &a;//p中存放的a的地址, p是指向变量a的指针
//解引用就会获取指向的对象
*p = 3; //即a的值变成3
解引用仅适用于那些确实指向了某个对象的有效指针.
指针本身是一个对象,指针又可以指向一个对象.
指针本身是一个常量称为顶层(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 删除。