您的位置:首页 > 理论基础 > 数据结构算法

c++基本数据结构和基本运算

2017-04-09 16:59 211 查看
char 

short

int

long

long long

float

double

bool

占用的字节,范围,注意事项,自动转换。

注意:来自(c++ primer )

1 long和int 在所占位数一样,在大的数据时,设置类型long long

2 double和float:在浮点类型时设为double类型,因为double精度高,并且在一些机器上比float快

3 在算数运算中,不要使用bool char类型,char在某些机器上是无符号的,和编译器有关,char不一定是符号的

4 同类型的 无符号类型和符号类型运算,符号类型转为无符号类型。

      无符号类型超出范围后,结果为取模后余(模为该类型最大的值,这和编译器有关,所占字节数)

      符号类型超出范围后,结果未定义。(有的编译器会报错,有的不会)  

    例子:

      for(unsigned i=134;i>=0;i--){}//这会一直执行,为-1时对其取模后的余。注意这是负数 1mod 2^32余数为1 然后-1 转为assic码

   
负数取模求余:先按正数求余,然后-余数得到对于的assic码,转为正数

      例如unsigned  char r=-8;

          8mod 256 =8 ;-8 对应:11111010 ----248;结果为248‘

 

 5 各种类型占用的大小,和编译器有关

红色的具体大小和编译器影响大  ,string在g++大小为4,vs(64)下32

 

16位机器

32位机器

64位机器

Char

1

1

1

Bool

1

1

1

Short

2

2

2

Int

2

4

4

Long

4

4

8

Long long

8

8

8

Float

4

4

4

Double

8

8

8

T *指针

2

4

8

String

32

32

32

运算符优先级

>= <= || && | ! 

 
优先级操作符描述例子结合性
1()

[]

->

.

::

++

--
调节优先级的括号操作符

数组下标访问操作符

通过指向对象的指针访问成员的操作符

通过对象本身访问成员的操作符

作用域操作符

后置自增操作符

后置自减操作符
(a + b) / 4;

array[4] = 2;

ptr->age = 34;

obj.age = 34;

Class::age = 2;

for( i = 0; i < 10; i++ ) ...

for( i = 10; i > 0; i-- ) ...
从左到右
2!

~

++

--

-

+

*

&

(type)
sizeof
逻辑取反操作符

按位取反(按位取补) 

前置自增操作符

前置自减操作符

一元取负操作符

一元取正操作符

解引用操作符

取地址操作符

类型转换操作符

返回对象占用的字节数操作符
if( !done ) ...

flags = ~flags;

for( i = 0; i < 10; ++i ) ...

for( i = 10; i > 0; --i ) ...

int i = -1;

int i = +1;

data = *ptr;

address = &obj;

int i = (int) floatNum;

int size = sizeof(floatNum);
从右到左
3->*

.*
在指针上通过指向成员的指针访问成员的操作符

在对象上通过指向成员的指针访问成员的操作符
ptr->*var = 24;

obj.*var = 24;
从左到右
4*

/

%
乘法操作符

除法操作符

取余数操作符
int i = 2 * 4;

float f = 10 / 3;

int rem = 4 % 3;
从左到右
5+

-
加法操作符

减法操作符
int i = 2 + 3;

int i = 5 - 1;
从左到右
6<<

>>
按位左移操作符

按位右移操作符
int flags = 33 << 1;

int flags = 33 >> 1;
从左到右
7<

<=

>

>=
小于比较操作符

小于或等于比较操作符

大于比较操作符

大于或等于比较操作符
if( i < 42 ) ...

if( i <= 42 ) ...

if( i > 42 ) ...

if( i >= 42 ) ...
从左到右
8==

!=
等于比较操作符

不等于比较操作符
if( i == 42 ) ...

if( i != 42 ) ...
从左到右
9&按位与操作符flags = flags & 42;从左到右
10^按位异或操作符flags = flags ^ 42;从左到右
11|按位或操作符flags = flags | 42;从左到右
12&&逻辑与操作符if( conditionA && conditionB ) ...从左到右
13||逻辑或操作符if( conditionA || conditionB ) ...从左到右
14? :三元条件操作符int i = (a > b) ? a : b;从右到左
15=

+=

-=

*=

/=

%=

&=

^=

|=

<<=

>>=
赋值操作符

复合赋值操作符(加法)

复合赋值操作符(减法)

复合赋值操作符(乘法)

复合赋值操作符(除法)

复合赋值操作符(取余)

复合赋值操作符(按位与)

复合赋值操作符(按位异或)

复合赋值操作符(按位或)

复合赋值操作符(按位左移)

复合赋值操作符(按位右移)
int a = b;

a += 3;

b -= 4;

a *= 5;

a /= 2;

a %= 3;

flags &= new_flags;

flags ^= new_flags;

flags |= new_flags;

flags <<= 2;

flags >>= 2;
从右到左
16,逗号操作符for( i = 0, j = 0; i < 10; i++, j++ ) ...从左到右
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: