c 的数据类型、运算符、表达式 (第二章)

2.1 变量名

变量名由字母和数字组成,第一个字符必须是字母,下划线 "_" 也算是一个字母,变量名是严格区分大小写的,除了常用的关键字,如 if else while int float ... 其他的都能用。 变量的命名很重要,基本遵循功能驱动的方式,简洁、带有说明的英文单词,c好像喜欢用小写及英文单词的缩写来命名,可以借鉴。

2.2 数据类型

char 字符串  int 整型  float 浮点型  double 双精度型 。2个限定符  unsigned 非负数 signed 实数 ,如果是32位的计算机,chars 含有8个bits , unsigned chars 的范围是 (0-255) ,signed chars 的范围是 (-128) - (127) 。

2.3 常量

整型常量 1234 , 123456789L  L表示 long ,ul表示 unsigned long。 浮点型常量 123.31f,同样 f 表示float。 字符串型常量 'x' , 字符串常量 '0' ,在ASCII 表中表示的值 为 48。枚举常量 enum boolean {NO,YES}; 。 定义一个常量需要使用关键字 #define MAX 1000 ,这里定义了一个整型常量 MAX 它的值为1000.

2.4 定义变量

可以把相同类型的变量定义在一行中,如:

1 int lower, upper, step;
2 char c, line[1000];

也可以分开定义,以便注释变量的用途,如

int lower;               /* comment write here */
int upper;
int step;
char c;
char line[1000];

变量也可以在声明中进行初始化,如

1 char esc = '\\';
2 int i = 0;
3 int limit = MAXLINE+1;
4 float eps = 1.0e-5;

2.5 数学运算符

加减乘除,模运算。

1 /*  + - * /  %  */
2 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
3     printf("%d is a leap year\n", year);
4 else
5     printf("%d is not a leap year\n", year);

2.6 关系运算符

>  >=  <  <= 它们有同样的优先级, ==  != 它们有相同的优先级。 &&  || 逻辑运算符的优先级为从左到右。

for (i=0; i < lim-1 && (c=getchar()) != '\n' && c != EOF; ++i)
    s[i] = c;

i < lim - 1 的表达式计算会优先于 c=getchar() , 因为 && 为从左到右的优先计算规律。

2.7 自增、自减

++i; --i;      s[i++];  k[i--];

2.8 位运算

不懂...

2.9 赋值和表达式

利用 + - * / % << >> & ~ ^ | 这些操作符,有的是位操作符,有的是算术操作符与变量结合形成表达式,基本公式如下:

/*------------------- formular */
expr1 = (expre1) op (expre2) ;  
expre1 op= expre2 ;
/*--------------------------------------- */
x *= y+1;           // same expression
x = x * (y+1);
/*--------------------------------------- */

2.10 条件表达式

expr1 ? expr2 : expr3  //formular

z = (a > b) ? a : b; /* z = max(a, b) */

附操作符的优先级:

小结:

 从这2章来看, php 和 c 有个关键就是数据类型,因为学php,所以对数据类型的概念弱化了,'$' 符号写多了,转向其他语言会不自然的写上 $name = 10; 。而c 不仅变量的申明需要数据类型,函数的定义也需要显式的指明返回的数据类型,函数的定义大概如下:

return_type function_name
{
  // function body
 // return ;
}

如果函数没有返回它申明的数据类型,或是返回了错误的,又或是返回了不该返回的类型,编译器都不能通过编译,我想这个数据类型就是干学PHP的硬伤,因为我们不需要考虑数据类型,它在内存中所占的大小...等等,久而久之,我们对其他数据结构也会感到陌生和难以理解。

ps:这本书的东西很浓缩,是需要不断地熟悉和练习,才能灵活的使用,理解力不代表动手能力,赶紧得上机练习习题吧,1周1章的进度也不慢了。这书也就9章。

位运算,我完全没概念,先放放吧,从未用过位运算的。

原文地址:https://www.cnblogs.com/arist/p/2692339.html