C++基础2:数据类型

目录

一、整数

1.任何变量都要初始化

2.初始化方式

3.overflow溢出

4.其他整数类型

5.测量变量或数据类型占几个字节

二、更多的整数类型

1.char字符类型

2.char的初始化

3.bool类型 

4.bool类型的本质

5.size_t

6.C++11的整数类型

7.图像的数据存储

三、浮点数

1. 一些问题

2.浮点数的格式

3.浮点数和整数的区别

4.采样精度不够

5.两个浮点数不要使用==判断相等

6.inf和nan

四、算数运算

1.常量数值

2.const类型限定符

3.auto自动类型(c++11)

4.算数操作符

5.优先级

6.其他操作

7.数据类型的转换

8.数据丢失

9.结合律

10.除法

11.算数运算数据类型


一、整数

1.任何变量都要初始化

不同平台编译器,赋值不同(不确定),但初始化后不会

2.初始化方式

int num = 10;
int num (10);
int num {10};

3.overflow溢出

计算结果的二进制数过运算范围溢出了,1当做符号位所以是负的

signed int第一位是符号位

unsigned int 全是数据位

4.其他整数类型

  • use long int for longer integers.
  • use short int for shorter integers.
  • and long long

5.测量变量或数据类型占几个字节

sizeof():它是一个操作符不是函数,函数的参数必须是变量

如:

int i = 0;
short s = 0;
cout << "sizeof(int)=" << sizeof(int) << endl;
cout << "sizeof(i)=" << sizeof(i) << endl;
cout << "sizeof(short)=" << sizeof(s) << endl;
cout << "sizeof(long)=" << sizeof(long) << endl;
cout << "sizeof(size_t)=" << sizeof(size_t) << endl;

二、更多的整数类型

1.char字符类型

a)本质上它是一个8位整数

b)signed char: 有符号的8位整数,取值范围:-128 +127

      unsinged char:无符号的8位整数,取值范围:0 255

      char: either signed char or unsinged char

2.char的初始化

字符本身就是整数,他有一个编码(ASCII码)

char c1 = 'C';
char c2 = 80;//十进制
char c3 = 0x50;//16进制

3.bool类型 

a)占一个字节,不是一位

b)值:true (1) or false (0)

c)对bool赋值不是0,则为1

bool b = true;
int i = b; // the value of i is 1 (隐式转换)
bool b = -256; // unrecommended conversion. the value of b is true
bool b = (-256 != 0); // better choice 

4.bool类型的本质

typedef char bool;
#define true 1
#define false 0

5.size_t

typedef unsigned int size_t;

a)它是一个整数

b)它一般用来表示内存大小,或元素个数,是数数用的

c)int类型宽度不够,所以有了size_t

6.C++11的整数类型

a)#include <cstdint>

int8_t
int16_t
int32_t
int64_t
uint8_t
uint16_t
uint32_t
uint64_t

b)一些有用的宏

INT8_MIN//8位int的最小值
INT16_MIN
INT32_MIN
INT64_MIN
INT8_MAX
INT16_MAX
INT32_MAX
INT64_MAX
...

7.图像的数据存储

a)int去存储要成4(4个字节)

b)常用char或byte用一个字节表示一个整数(0 255)

图像占内存大小:6720 × 3780 ×3 = 76,204,800 = 76M Bytes

三、浮点数

1. 一些问题

a)[0 1]之间有多少实数:无穷

b)32位可以表达多少数值:2^32,4GB

c)1.2float给的是近似值1.200000047683716(1 2之间采样)

d)浮点数计算会带来微小误差,不能消除

2.浮点数的格式

a)float单精度浮点数,32位,4个字节

        i)第一个是符号位,决定正负

        ii)exponent指数部分位,放大缩小被

        iii)fraction

b)double双精度,64位

c)long double 128位

d)半精度16位,用于深度学习浮点运算

3.浮点数和整数的区别

a)浮点数可以表达整数不能表达的小数

b)范围更广

c)浮点数操作比整数慢,特别乘法除法开方

d)精度降低

e)double 64bit比float更长,运算更慢,若大量密集型计算,如矩阵double和float速度会差很多

4.采样精度不够

float f1 = 2.34E+10f;
float f2 = f1 + 10; // but f2 = f1

增加的数量不要和前面的量级差很多

5.两个浮点数不要使用==判断相等

两个浮点数是近似的,不是精确数

if (f1 == f2) //bad
if (fabs(f1 - f2) < FLT_EPSILON) // good

6.inf和nan

a)inf无穷大

float f1 = 2.0f / 0.0f; ±inf: infinity (Exponent=11111111, fraction=0)

bnan不是一个数值

float f2 = 0.0f / 0.0f; nan: not a number (Exponent=11111111, fraction!=0)

四、算数运算

1.常量数值

a)

95 // 十进制

0137// 八进制(不要在前面随意加0)

0x5F // 16进制(对程序员友好)

b)常数的书写方式

95 // int

95u // unsigned int (写一个很大的整数超过2^31,有符号的不能表达,加u表达范围*2)

95l // long

95ul // unsigned long

95lu // unsigned long

c)浮点数

3.14159 // 3.14159

6.02e23 // 6.02 x 10^23

1.6e-19 // 1.6 x 10^-19

3.0 // 3.0

d)浮点数书写方式

6.02e23L // long double

6.02e23f // float

6.02e23 // doubl

写像3.0,3.14,不要漏了f,说明常数是float类型,这样就不需要类型转换,如果写3.0再赋值,就是double转float

2.const类型限定符

const float PI = 3.1415926f;
PI += 1; //error!

Pi变量值不可修改,可代替宏定义

3.auto自动类型(c++11)

任意类型,看初始化是什么类型

auto a = 2; // type of a is int
auto bc = 2.3; // type of b is double
auto c ; //valid in C, error in C++错误
auto d = a * 1.2; //double


auto a = 2; // type of a is int
// will a be converted to a 
//   double type variable?
a = 2.3; //int类型double转int去掉小数位,a=2

a的类型在初始化时定下来就不会改变

4.算数操作符

Operator name

Syntax

unary plus

+a//不会对a的值做任何改变

unary minus

-a

addition

a + b

subtraction

a - b

multiplication

a * b

division

a / b

modulo

a % b//求余10%3=1

bitwise NOT

~a//二进制按位取反

bitwise AND

a & b//二进制按位运算

bitwise OR

a | b

bitwise XOR

a ^ b//异或操作

bitwise left shift

a << b移位操作

bitwise right shift

a >> b

5.优先级

优先级依次降低

  • a++
  • ++a
  • *   /
  • +   -
  • <<   >>

用括号内优先级高

6.其他操作

a)赋值操作

a = b
a += b//a=a+b
a -= b//a=a-b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

b)自增和自减

a++

++a

a--

--a

int a = 3;
int b = a++; // 先取值再++,b=3
int c = ++a; //先+1再取值,b=5

7.数据类型的转换

int num_int1 = 9; // 类型相同不需要类型转换
int num_int2 = 'C'; // c是一个字符,是一个8位整数,隐式类型转换,8->32
int num_int3 = (int)'C'; // 显式转换,转换格式(c-style)
int num_int4 = int('C'); //显式转换,转换格式(function-style)
int num_int5 = 2.8; //implicit conversion 2
float num_float = 2.3; //implicit conversion from double to float
short num_short = 650000; //short里面放不下

8.数据丢失

9.结合律

int i = 17 / 5 * 5;//左到右结合
int i = (17 / 5) * 5;//代码可读性更高

10.除法

a)整数除法

float f = 17 / 5; // f will be 3.f, not 3.4f.结果是整数3,初始化给float 3.0f

b)浮点数除法

float f = 17 / 5.f; // f will be 3.4f. 17.0/5.0

11.算数运算数据类型

只有int, long, float, double

unsigned char a = 255;
unsigned char b = 1;
int c = a + b; // c = ?c= 256若两个unsigned char加法,这个加法只能做int类型去对应会转成int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值