C/C学习笔记/类型、运算符、表达式

C学习笔记

——类型、运算符、表达式


注: 该颜色语句仅为本人个人理解!!!

一、变量名

变量名主要由 字母数字组成。 第一个字符必须为字母。“_”属于字母。 区分大小写
由于库例程的名字通常以 下划线 开头,因此,用户变量命名最好不要以下划线开头。
传统C语言中, 变量常用小写字母,符号常量常用大写
局部变量用短名,外部变量用长名。
更具体的命名方式可以参考: http://c.biancheng.net/cpp/html/437.html

二、变量长度

char <span style="white-space:pre">	</span><span style="white-space:pre">	</span>通常<span style="white-space:pre">	</span>1 Byte
int<span style="white-space:pre">		</span>通常代表特定机器中的整数的自然长度。可以为 2 Bytes /4 Bytes。
short int<span style="white-space:pre">	</span>通常<span style="white-space:pre">	</span>2 Bytes
long int <span style="white-space:pre">	</span>通常<span style="white-space:pre">	</span>4 Bytes
float<span style="white-space:pre">		</span>通常<span style="white-space:pre">	</span>4 Bytes
double <span style="white-space:pre">		</span>通常<span style="white-space:pre">	</span>8 Bytes

不同机器可以自定类型长度,但:int 与 short int 至少 2 Bytes;long int 至少 4 Bytes。
可以利用 sizeof函数来查看具体变量长度。也可以通过头文件 limits.hfloat.h查看。
unsigned 与 signed 也可修饰 char 型,取决于具体机器。

三、常量

长整类型常量以字母 l 或 L 结尾。如:55555L / 55555l
无符号型常量以字母 u 或 U 结尾。
float型常量以字母 f 或 F 结尾。( 没有后缀的浮点型变量默认为double型
浮点型常量后再加以 l 或 L 结尾,则表示 long double型。
另外,一般整形数为十进制型,若前缀有数字 0 ,则为八进制;若前缀有 0x 或 0X, 表示为十六进制。 

字符型常量:书写时,用单引号括起,如 "a"、"1" 。其整形值对应ASCII码表。
转义字符:
\0 空字符(NULL)
\a 响铃符
\b 回退符
\f 换页符
\n 换行符
\r 回车符
\t 横向制表符
\v 纵向制表符
\\ 反斜杠
\? 问号
\' 单引号
\" 双引号
\ooo 八进制数
\xhh 十六进制数

对于 \ooo 和 \xhh 来说:
'\013'——>013(八进制数)——>11(十进制数)——>'\v' (ASCII表)
'\0xb'——>0xb(十六进制数)——>11(十进制数)——> '\v' (ASCII表)

常量表达式:仅仅包含常量的表达式, 在编译时即求值,而不是在程序运行时求值


字符串常量(可看成字符数组)
字符串常量也叫字符串字面值,是用 双引号括起0个或多个字符组成的 字符序列,以 '\0' 结尾。 strlen 函数可以返回字符串长度,但不包含'\0'。(string.h)
双引号不是字符串的一部分,只用于限定字符串。

四、枚举

枚举是一个常量整形值的列表。
在没有显示说明(直接赋值)的情况下,enum类型中第一个枚举名的值为 0 ,第二个为 1 ,一次类推。(等差数组)
例:
enum key {
A,
B,
C,
D=10,
E,
F
}
则:A = 1, B = 2, C = 3, D = 10, E = 11, F = 12.

五、声明

默认情况下, 外部变量与静态变量被初始化为 0
未显示初始化的自动变量的值为未定义值(即无效值)。

任何变量声明均可使用 const 限定符限定。表示该值不能被修改。(修改是指在程序运行过程中无法被程序修改,而不是在编程时程序员修改)

六、运算符(忘了摘自哪里了,见谅=_=!

简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

 

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

 

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

=

不等于

表达式!= 表达式

 

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

 

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

 

15

逗号运算符

表达式,表达式,…

左到右

--

注:自增/自减运算符只能作用于变量,不能作用于表达式!!
位运算符只能作用于整型操作数!!
(无符号)左右移用0填补。
(有符号)“算术移位”:右移用符号位填补;“逻辑移位”:右移以0填补。取决于具体机器。

(i + j)++ 非法

一些运算符使用时需注意的问题:
  1. 与运算符“表达式1&&表达式2”:若表达式1为假,则表达式2不会再进行计算,直接判定结果为假。
    例:i = 0; j=1;  
    i && ++j   之后,j 的值仍为1!
  2. 或运算符“表达式1 || 表达式2” :同“与”运算符,此时,若表达式1为真,则表达式2不再计算。
  3. 自增/自减运算符“++”、“--”:若该符在变量之前,则在变量被使用之前,先自增/自减;若在变量之后,则在变量使用之后,才会自增/自减。
    例:i = 1;
    a = ( i ++ ) = i;

运算符“? :”
表达式1?表达式2:表达式3
表达式1为真,则取表达式2;为假则取表达式3.

七、类型转换

分为: 自动转换强制转换

自动转换:把比较”窄”的操作数,转换为比较“宽”的操作数,并且不丢失信息。( “宽”、“窄”按占内存大小而定)   下图为转载

另外,为了节省存储空间、机器执行时间,float不会自动转化为double类型
赋值运算符右边的值会自动转换成左边变量的类型。

例:int ivar = 10.6;  得出的ivar的值为10;(不四舍五入)

强制转换类型:(!!! 强制转换仅仅是生成一个指定类型的值,被转换的变量或常量本身的值不会改变!!!)
(类型名)表达式
例:fvar = 10.5;    (int) fvar = 10;但 fvar 的值仍为10.5.




注: 该颜色语句仅为本人个人理解!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值