笔记_C语言_ 类型、运算符与表达式

变量和常量是程序处理的两种基本数据对象。
声明语句说明变量的名字及类型,也可以指定变量的初值。
运算符指定将要进行的操作。
表达式则把变量与常量组合起来生成新的值。
对象的类型决定该对象可取值的集合以及可以对该对象执行的操作。

变量名

变量名使用小写字母,符号常量名全部使用大写字母。下划线“_”被看做是字母。所有关健字中的字符都必须小写。
选择的变量名要能够尽量从字面上表达变量的用途,这样做不容易引起混淆。局部变量 一般使用较短的变量名(尤其是循环控制变量)

数据类型及长度

C 语言只提供了下列几种基本数据类型:

  • char 字符型,占用一个字节,可以存放本地字符集中的一个字符
  • int 整型,通常反映了所用机器中整数的最自然长度
  • float 单精度浮点型
  • double 双精度浮点型

此外,还可以在这些基本数据类型的前面加上一些限定符。short 与 long 两个限定符 用于限定整型:

  • short int sh;
  • long int counter;

在上述这种类型的声明中,关键字 int 可以省略。通常很多人也习惯这么做。

常量

ANSI C 语言中的全部转义字符序列如下所示:
符号意义
\a响铃符
\\反斜杠
\b回退符
\?问号
\f换页符
\’单引号
\n换行符
\"双引号
\r回车符
\ooo八进制数
\t横向制表符
\xhh十六进制数
\v纵向制表符
字符常量

一个字符常量是一个整数,书写时将一个字符括在单引号中,如,‘x’。字符在机器字符 集中的数值就是字符常量的值。
字符常量’\0’表示值为 0 的字符,也就是空字符(null) 。我们通常用’\0’的形式代替 0, 以强调某些表达式的字符属性,但其数字值为 0。
常量表达式是仅仅只包含常量的表达式。这种表达式在编译时求值,而不在运行时求值。 它可以出现在常量可以出现的任何位置。

字符串常量

字符串常量也叫字符串字面值,是用双引号括起来的 0 个或多个字符组成的字符序列。

我们应该搞清楚字符常量与仅包含一个字符的字符串之间的区别:‘x’与"x"是不同的。 前者是一个整数,其值是字母 x 在机器字符集中对应的数值(内部表示值); 后 者是一个包含 一个字符(即字母 x)以及一个结束符’\0’的字符数组。

枚举常量(enum)

枚举常量是另外一种类型的常量。枚举是一个常量整型值的列表。
在没有显式说明的情况下,enum 类型中第一个枚举名的值为 0,第二个为 1,依此类推。如果只指定了部分枚举名的值,那么未指定值的枚举名的值将依着最后一个指定值向后递增,不同枚举中的名字必须互不相同。同一枚举中不同的名字可以具有相同的值。

#include <stdio.h>
#include <stdlib.h>
void main() {
 //枚举
 enum months {JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
 printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC);
 system("pause");
}

输出结果

1,2,3,4,5,6,7,8,9,10,11,12
请按任意键继续. . .

类型转换

强制类型转换

(类型名称)表达式
我们可以这样来理解强制类型转换的准确含义:在上述语句中,表达式首先被赋值给类型名 指定的类型的某个变量,然后再用该变量替换上述整条语句
强制类型转换符和一元运算符的运算等级是一样的

自增运算符和自减运算符

++n是先把n加上1,然后使用n
n++是先使用n,然后给n加1

按位运算符

符号名含义
&按位与(AND)
|按位或(OR)
^按位异或(XOR)
<<左移
>>右移
~按位求反(一元运算符)

赋值运算符与表达式

x *= y + 1
的含义是:
x = x * (y + 1)
而不是
x = x * y + 1

赋值表达式的类型是它的左操作数的类型,其值是赋值操作完 成后的值

条件表达式

条件表达式(使用三元运算符“? :”)提 供了另外一种方法编写这段程序及类似的代码段,在表达式
expr1 ? expr2 : expr3
中,首先计算 expr1,如果其值不等于 0(为真),则计算 expr2 的值,并以该值作为条件 表达式的值,否则计算 expr3 的值,并以该值作为条件表达式的值。expr2 与 expr3 中只 能有一个表达式被计算。
z = (a > b) ? a : b; /* z = max(a, b) 求Z的最大值*/
应该注意,条件表达式实际上就是一种表达式,它可以用在其它表达式可以使用的任何 地方;如果 expr2 与 expr3 的类型不同,结果的类型将由本章前面讨论的转换规则决定

运算符优先级与求值次序

  • 同一行中 的各运算符具有相同的优先级,各行间从上往下优先级逐行降低。例如,*、/与%三者具有相 同的优先级,它们的优先级都比二元运算符+、-高。运算符( ) 表 示 函数调用。

运算符的优先级与结合性

运算符结合性
( ) [ ] -> .从左至右
!  ~  ++  - - +  -  *   (type)  sizeof从右至左
* / %从左至右
+ -从左至右
<<  >>从左至右
<  <=  >  >=从左至右
==  !=从左至右
&从左至右
^从左至右
|从左至右
&&从左至右
||从左至右
?  :从左至右
=  +=  - =   *=  /=  %=  &=  ^=  |=  <<=  >>=从右至左
,从右至左

注:一元运算符+、-、&与*比相应的二元运算符+、-、&与*的优先级高。
注意,位运算符&、^与|的优先级比运算符==与!=的低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值