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
运算符优先级
>= <= || && | !
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++ ) ... | 从左到右 |
相关文章推荐
- 【C++/数据结构】顺序表的基本操作
- 【C++/数据结构】循环链表的基本操作
- c/c++ 数据结构-线性表(单链表基本操作的实现)
- 【C++研发面试笔记】11. 基本数据结构-红黑树RBT
- 【C++/数据结构】单链表的基本操作
- 面向对象c++数据结构--基本数据结构之链表(前篇)(凌风)
- 数据结构第五版第二章实验2.实现单链表的各种基本运算
- 第3周SHH数据结构—【项目1-顺序表的基本运算】
- 数据结构 - 串的基本运算实现
- PTA数据结构之 单链表的基本运算
- 基本数据结构:链表(list) - C小加 - C++博客
- 队列的数据结构及基本运算
- C++ 简单信息的表示和基本运算
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- 数据结构—Problem D: 顺序表基本运算(线性表)
- C/C++基本数据结构:顺序表/链表 队列
- C/C++基本数据结构:链表的基本使用和实现
- 数据结构 - 数组和广义表的基本运算实现
- 【数据结构】双向循环线性表的基本操作--C++/C实现
- 【数据结构】双向循环线性表的基本操作--C++/C实现