C程序设计语言读书笔记:(二)类型、运算符与表达式

*注意本章例题和习题中的函数!*
1.下划线被看做是字母,通常用于命名较长的变量名,以提高可读性。
由于库历程的名字通常以下划线开头,因此变量名不要以下划线开头。

2.short类型通常为16位,long32位,int为16或32位
short与int至少为16位,long类型至少为32位
short不长于int,int不长于long

3.有关类型的长度的定义的符号常量以及其他与机器和编译器相关的属性可以在标准头文件limits.h和float.h中找到。

4.一个字符常量是一个整数,字符常量一般用来与其他字符进行比较,但也可以像其他整数一样参与数值运算。

5.用’\ooo’表示任意字节大小的位模式,其中ooo代表1-3个八进制数字
还可以用’\xhh’表示,hh是一个或者多个十六进制数字。

6.字符常量‘\0’表示值为0的字符,也就是空字符null,我们通常用’\0’的形式代替0,以强调某些表达式的字符属性,但是其数字值为0.

7.字符串常量就是字符数组。

8.枚举为建立常量值与名字之间的关联提供了一种便利的方式,相对于#define语句来说,它的优势在于常量值可以自动生成。尽管可以生命enum类型的变量,但是编译器不检查这种类型的变量中存储的值是否为该枚举的有效值。不过枚举变量提供这种检查,因此枚举比#define更具有优势,此外,调试程序可以以符号形式打印出枚举变量的值。

9.所有变量必须先声明后使用。

10.对于数组,const限定数组所有元素的值都不能被修改:const char msg[] = “warning: ”
const限定符也可以配合数组参数使用,它表明函数不能修改数组元素的值:int strlen(const char[]);

11.如果某一年的年份能被4整除但是不能被100整除,那么这一年就是闰年,此外能被400整除的年份也是闰年。
if((year % 4 == 0 && year %100 != 0) || year % 400 == 0)
printf(“%d is a leap year\n”,year);
else
printf(“%d is not a leap year\n”, year);

13.表达式 s[i] - ‘0’ 能够计算出s[i]中存储的字符所对应的数字值,这是因为’0’,’1’等在字符集中对应的数值是一个连续的递增序列。

14.把字符串s转换为相应的整型数:

int atoi (char s[])
{
int i, n;

n = 0;
for(i = 0;s[i] >= '0' && s[i] <= '9';++i)
    n = 10 * n + (s[i] - '0');
return n;
}

15.把字符c转换为小写形式:

int lower(int c)
{
    if(c >= 'A' && c <= 'z')
        return c + 'a' - 'A';
    else
        return c;
}

16.当把一个char类型的值转换为int类型的值时,其结果有没有可能为负整数?
对于不同的机器,其结果也不同,这反映了不同机器结构之间的区别。在某些机器中,如果char类型值的最左一位为1,则转换为负整数(进行“符号扩展”),而在另一些机器中,把char类型值转换为int类型时,在char类型值的左边添加0,这样导致的转换结果总是为正值。

17.C语言的定义保证了机器的标准打印字符集中的字符不会是负值,因此,在表达式中这些字符总是正值。但是存储在字符变量中的位模式在某些机器中可能是负的,而在另一些机器上可能是正的。为了保证程序的可移植性,如果要在char类型的变量中存储非字符数据,最好指定signed或者unsigned限定符。

18.真 就是 非0

19.使用float类型主要是为了在使用较大的数组时节省存储空间,有时也为了节省机器执行时间(双精度算术运算特别费时)

20.带符号值与无符号值之间的比较运算是与机器相关的,因为它们取决于机器中不同整数类型的大小。
假如int占16位,long占32位 那么-1L<1U.这是因为unsigned int 类型的1U将被提升为signed long类型,但是-1L>1UL 这是因为-1L将被提升为unsigned long类型,因而成为一个比较大的是正数。

  1. s[i] - ‘a’ + 10 和 s[i] - ‘A’ + 10 能够计算出s[i]中存储的字符所对应的数字值.

  2. 位运算符只能作用于整型操作数。

  3. 按位与 & 经常用于屏蔽某些二进制位。

  4. 按位或 | 常用于将某些二进制位置为1

  5. 按位异或 ^ 当两个操作数对应位不相同时,将该位置为1,否则置为0

  6. 移位时,unsigned类型右移,左边空出的部分将用0填补,对signed类型的带符号值进行右移时,某些机器对左边空出的部分将用0填补(算术移位) 某些机器则对左边空出的部分用0填补(逻辑移位)

  7. 表达式的值与计算次序不确定的情况。 主要想自增运算在一个表达式中是引用旧值还是引用新值的问题。
    例如a[i] = i++; y = n++ + ++n;

猜你喜欢

转载自blog.csdn.net/weixin_42359254/article/details/81636979