第二章 类型、运算符和表达式
虽然本节分为了12个小结,但我这里是个总结性的,应该算是读书笔记吧,而且本节都是基础性的知识讲解,所以我这里准备分三个小结来写,即
2.1 变量类型
2.2 运算符
3.3 表达式
江郎这么快就才尽了!都不知道怎么写了,本章应该算C里面最基础的规则的,认识它,并遵守它,你才能玩好这场游戏,不然Game Over!书中虽然不到2也纸,但讲述的非常清楚,我就不画蛇添足了。还是看习题吧。
Exercise 2-1.Write a program to determine the ranges of char, short, int, and longvariables, both signedand unsigned,by printing appropriate values from standard headers and by direct computation. Harder if you compute them: determine the ranges of the various floating-point types.
解析:利用头文件,来确定它们的范围,实现起来比较简单;如果要直接计算的话,就要费些脑筋了。拿char类型来举例,符号型char 范围为(-128~127) ;无符号型,其范围为(0~255),Why? 这时候,要接触一个知识,这些数是如何在计算机里存储的?补码!数值在计算机中,一律用补码来存储;char a signal byte,1个字节,无符号型则表示(0~2^8-1),有符号型,最高位表示符号位,那么就剩下7位数值,而其负数,表示为除最高位,其他位取反,然后加1;即(-2^7 ~ 2^7-1)。
#include /* 系统头文件 */
#include /* 系统头文件 */
#include /* 系统头文件 */
#include /* 系统头文件 */
/* Using the stand header , 1st version */
int main()
{
// char
printf("signed char variables have value between %d and %d\n", \
SCHAR_MIN,SCHAR_MAX);
printf("unsigned char variables have value between %d and %d\n\n", \
0,UCHAR_MAX);
// int
printf("signed int variables have value between %d and %d\n", \
INT_MIN,INT_MAX);
printf("unsigned int variables have value between %d and %u\n\n", \
0,UINT_MAX);
// short int
printf("signed short int variables have value between %d and %d\n", \
SHRT_MIN,SHRT_MAX);
printf("unsigned short int variables have value between %d and %u\n\n", \
0,USHRT_MAX);
// long int
printf("signed long int variables have value between %ld and %ld\n", \
LONG_MIN,LONG_MAX);
printf("unsigned long int variables have value between %d and %lu\n\n", \
0,ULONG_MAX);
// long long int
printf("signed long long int variables have value between %lld and %lld\n",
LONG_LONG_MIN,LONG_LONG_MAX);
printf("unsigned long long int variables have value between \
%d and %llu\n\n",0,ULONG_LONG_MAX);
system("PAUSE"); /* 系统暂停运行,可以方便看到显示结果 */
return 0;
}
不得不承认,我这个程序写复杂了,但对于理解其原理还是有帮助的;下面帖一个比较有创意的程序
/* calculate the ranges of various types */
#include
#include
#include
int main(void)
{
/* integer types */
unsigned char c;
unsigned short s;
unsigned int i;
unsigned long l;
unsigned long long ll;
putchar('\n');
printf("VALUE RANGES FOR INTEGER TYPES\nUPPERCASE comes from \n"
"lowercase is calculated.\n\n");
/* char */
c = ~0;
c >>= 1;
printf("signed char: %4d, %4d\n",-c-1,c);
printf("SCHAR_MIN: %4d, SCHAR_MAX %4d\n",SCHAR_MIN,SCHAR_MAX);
printf("unsigned char: %4u, %4u\n",0,c*2+1);
printf("UCHAR_MAX: %4u\n",UCHAR_MAX);
putchar('\n');
/* short */
s = ~0;
s >>= 1;
printf("signed short: %6d, %6d\n",-s-1,s);
printf("SHRT_MIN: %6d, SHRT_MAX: %6d\n",SHRT_MIN,SHRT_MAX);
printf("unsigned short: %6u, %6u\n",0,s*2+1);
printf("USHRT_MAX: %6u\n",USHRT_MAX);
putchar('\n');
/* int */
i = ~0;
i >>= 1;
printf("signed int: %11d, %11d\n",-i-1,i);
printf("INT_MIN: %11d, INT_MAX: %11d\n",INT_MIN, INT_MAX);
printf("unsigned int: %11u, %11u\n",0,i*2+1);
printf("UINT_MAX: %11u\n",UINT_MAX);
putchar('\n');
/* long */
l = ~0;
l >>= 1;
printf("signed long: %11ld, %11ld\n",-l-1,l);
printf("LONG_MIN: %11ld, LONG_MAX: %11ld\n",LONG_MIN, LONG_MAX);
printf("unsigned long: %11lu, %11lu\n",0l,l*2+1);
printf("ULONG_MAX: %11lu\n", ULONG_MAX);
putchar('\n');
/* long long */
ll = ~0;
ll >>= 1;
printf("signed long long: %20lld, %20lld\n",-ll-1,ll);
printf("LLONG_MIN: %20lld, LLONG_MAX: %20lld\n",LLONG_MIN, LLONG_MAX);
printf("unsigned long long: %20llu, %20llu\n",0ll,ll*2+1);
printf("ULLONG_MAX: %20llu\n", ULLONG_MAX);
system("PAUSE");
return 0;
}
说完变量就说常量,相辅相成的!顾名思义,不动的!文中的重点介绍了以下三点:1、转义字符;2、const用法;3、enum.其中const用法,面试必考题之一,的专门花时间了解下,记住常用的转义字符也是很有帮助的,enum主要注意和#define的区别
最后,文中提到了声明,在C语言里最常用的两个词声明(Declaration) 和 定义(Definition);区别和联系