再读《The C Programming Language》 第二章 2.1 变量类型

第二章 类型、运算符和表达式

虽然本节分为了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);区别和联系



你可能感兴趣的:(C,Language)