基本数据类型

1.基本数据类型

大体可以分为整型、浮点型和字符型,此外还有枚举型等

细节:ISO C++标准中并没有明确规范每种数据类型的字节数和取值范围,他只是规定它们之间的字节数大小顺序满足如下关系:

        signed/unsigned char <= unsiged short <= unsigned int <= unsigned long

具体的类型和表示范围如下:

类型名字节范围
bool1false, true
char1-128~127
signed char1-128~127
unsigned char10~255
short (signed short)2-32768~32767

unsigned short

20~65535
int (signed int)4-2147483648~2147483647

unsigned int

40~4294967295
long (signed long)4-2147483648~2147483647
unsigned long40~4294967295
float43.4 × \small 10^{-38}~3.4 × \small 10^{38}
double81.7 × \small 10^{-308} ~ 1.7 × \small 10^{308}
long double81.7 × \small 10^{-308} ~ 1.7 × \small 10^{308}
  • 32位处理器通常将short和int都用4个字节表示,64处理器通常将int和long分别于4个字节和8个字节表示。
  • signed表示有符号位,unsigned表示无符号位,short、int、long类型默认情况均为signed。
  • 两种浮点数除了取值范围有所不同之外,精度也有所不同,float可以保存7位有效数字,double可以保留15位有效数字

2.常量

在整个程序运行过程中其值都始终不改变的量。

(1)整型常量:十进制、八进制、十六进制等。

整型常量可以用后缀字母L(或l)表示长整型,后缀字母U(或u)表示无符号型,也可以同时使用后缀L和U(大小写无关)

(2)实型常量:一般形式和指数形式。

如:-3,12.3,1e5,1E-3 E-3是不合法的,前面必须有实数。

(3)字符常量:用单括号括起来的一个字符。

C++预定义的转义字符:

字符常量形式ASCLL(十六进制码)含义字符常量形式ASCLL(十六进制码)含义
\a07响铃\r0D回车

\n

0A换行\v0C换页
\t09水平制表符\\5C字符"\"
\v0B垂直制表符\"22双引号
\b08退格\'27单引号

细节:无论是不可显示字符还是可显示字符,都可以用十六进制或八进制ASCLL码来表示,表示形式是:

                \nnn 八进制形式

                \xnnn 十六进制形式

(4)字符串常量:是用一对双引号括起来的字符序列。

(5)布尔常量:false or true


3.变量

在程序执行过程中其值可以变化的量, 变量是需要用名字来标志的。

        (1)变量的声明和定义:变量在使用之前需要首先声明其类型和名称。

细节:声明一个变量不一定引起内存的分配,而定义一个变量意味着给变量分配内存空间。

如:

        int a = 3;

        double f = 3.56;

        char c  = 'a';

        int a(3);

        (2)变量的储存类型:

  • auto储存类型:采用堆栈方式分配内存空间,属于暂时性储存,其储存空间可以被若干变量多次覆盖使用。
  • register储存类型:存放在寄存器中。
  • extern储存类型:在所有函数和程序段中可以使用。
  • static储存类型:在整个程序运行期间都有效。

4.符号常量

为常量命名。

细节:符号常量在使用之前一定要先声明。

声明形式:

        const 数据类型 常量名 = 常量值

        #define 常量名 常量值


5.运算符与表达式

表达式的定义:

  • 一个常量或者标志对象的标识符,其值是常量或者对象的值。
  • 一个表达式可以用来参与其他操作,即用作其他运算符的操作数。
  • 包含在括号中的表达式仍是一个表达式。

分类:

(1)算术运算符与算术表达式

        C++中的算术运算符包括基本算术据运算符和自增自减运算符。由算术运算符、操作数和括号构成的表达式称为算数表达式。

  • 基本算数运算符有:+,-,*,/,%。其中+,-作为正和和负号是为一元运算符,其余都为二元运算符。它们之间的相对优先级与数学中也是一致的,即先乘除、后加减、同级运算自左至右进行。
  • a%b表示a被b除的余数,%的优先级与/相同。
  • 注意:两个整数相除时,其结果取商的整数部分,小数部分自动舍弃,1 / 2 = 0。
  • ++i与i++的区别

                cout << i++; //表示cout << i;       i+=1;

                cout << ++i; //表示i+=1;            cout << i;

(2)赋值运算与赋值表达式

                带有赋值运算符的表达式称为赋值表达式。如n = n + 5;结合性从右向左

(3)逗号运算符与逗号表达式

                a = 3*5, a*4;  //最终的结果为60

(4)逻辑运算与逻辑表达式

                优先级相同(较高):<,<=,>,>=

                优先级相同(较低):==,!=

  • 逻辑运算符优先级次序:低 -> 高           ||         &&            !
  • &&和||有“短路特性”,对于&&,如果前一个操作数为假,就不再执行后面的操作。对于||,如果前一个操作数为真,就不再执行后面的操作。

(5)逻辑运算符与逻辑表达式

C++中唯一一个三目运算符是(?),能实现简单的选择功能,形式为:表达式1 ?表达式2:表达式3

(6)sizeof运算符

sizeof运算符用于计算某种类型的对象在内存中所占的字节数

(7)位运算

  • 按位与(&):将操作数对应的每一位进行与操作,对应位都为1结果才为1,其余均为0。
  • 按位或(|):对应位均为0结果才为0,其余均为1。
  • 按位异或(^):对应位相同,则运算结果为0;对应位不同,则运算结果为1。
  • 按位取反(~):将二进制的每一位进行取反。
  • 移位:

             左移运算<<:按照指定的位数将一个数的二进制值左移位。左移后,低位补0,移出的高位舍弃。

             右移运算>>:按照指定的位数将一个数的二进制值右移位。右移后,移出的低位舍弃,如果是无符号数则高位补0;如果是有符号数,则高位补符号位或补0(不同编译器的处理不同)。


6.运算符的优先级与结合性

优先级运算符结合性
1[],(),->,后置++,后置--左->右
2前置++,前置--,sizeof,&,*,+(正号),-(负号),~,!右->左
3(强制转换类型)右->左
4.  *,-> *左->右
5*,/,%左->右
6+, -左->右
7<<,>>左->右
8<,>,<=,>=左->右
9==,!=左->右
10&左->右
11^左->右
12|左->右
13&&左->右
14||左->右
15?:左->右
16=,*=,/=,%=,+=,-=,<<=,>>=,&=,^=,|=右->左
17左->右


7.混合运算时的类型转换

隐含转换:将低类型数据转换为高类型数据。

charshortintunsignedlongunsigned longfloatdouble
  • 逻辑运算符要求参与运算的操作数均为bool类型,如果为其他类型,则非0转换为true,0转换为false。
  • 位运算要求操作数必须为整数,若为不同类型的整数,则会自动进行隐含转换。
  • 赋值运算符要求左值与右值类型相同,若不同则会进行类型转换,但这时不再适用隐含转换的规则,而是一律将右值转成左值的类型

显式转换:

          类型说明符 (表达式)         //c++风格

        (类型说明符)表达式            //c语言风格

此外c++又定义了4种类型转换操作符:

static_cast    dynamic_cast    const_cast    reinterpret_cast


8.语句

  • c++的语句包括空语句、声明语句、表达式语句、选择语句、循环语句、跳转语句、复合语句、标号语句。
  • 一个独立的(;)就构成一个空语句,空语句不产生任何操作。
  • 表达式与语句的最大区别是:表达式可以作为另一个更复杂表达式的一部分,继续参与运算;而语句则不能。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值