美文网首页
C语言之位运算和文件操作

C语言之位运算和文件操作

作者: keeeeeenon | 来源:发表于2019-03-29 11:36 被阅读0次

    一、位运算

    按位计算

    位运算的操作对象只能是整型或字符型数据。
    C语言提供6种位运算符:
    位运算不产生进位

    &按位与
    | 或
    ^异或
    ~ 按位取反
    <<左移
    >>右移
    复合赋值运算符(11):
    &=、|=、=、<<=、>>=

    1、按位与运算(&)

    两个相应的二进制位都是1时,它们按位运算后的结果才为1,不则为0。
    1&1=1 全1为1
    1&0=0 有0为0
    0&1=0
    0&0=0
    作用:清零。

    2、按位或运算(|)|

    两个相应的二进制位中只要有一个为1,则它们按位或运算后结果为1。
    1|1=1 有1为1
    1|0=1 全0为0
    0|0=0 按位加
    作用:将特定位置1。

    3、按位异或运算(^)

    当两个相应位同为1或同为0时,按位异或运算结果为0;两个相应位一个为1另一个为0时,按位异或运算结果为1。
    1^1=0 相异为1
    1^0=1 相同为0
    0^1=1
    0^0=0

    4、按位取反运算(~)

    按位取反运算符是一个单目运算符。按位取反后0变1,1变0。
    注:
    计算技巧:对一个数按位取反得到的值为该数+1后再乘以-1。

    例题:~0:首先换成16位二进制也就是16个0然后按位取反得到16个1,最高为是符号位1为负数,所以要将其余位再次取反加一,得到的结果是-1

    5、按位左移运算(<<)

    格式:数<<n
    功能:将二进制位按位依序左移n位。
    计算技巧:对一个十进制数左移n位后得到的值为该数乘以2的n次方的积。

    6、按位右移运算(>>)

    格式:数>>n
    功能:将二进制位按位依序右移n位
    计算技巧:若该数为一个负数并且不能被2n整除则得到的数为商加-1

    例题分析:
    int b=2;表达式(b>>2)/(b>>1)的值是什么?
    0(整除为0)

    例题分析:
    A)100B)80C)64D)32
    main()
    {char x=040;//八进制标志
    printf("%o\n",x<<1); 
    A:以八进制输出
    

    二、文件

    (一)文件概念

    1、文件:记录在外部存贮介质(外存)上的数据的集合。
    2、文件的分类:
    文本文件(ASCII码文件):每个字符存储到文件中。
    二进制文件:以二进制存储。

    C语言中对文件的存取是以字符(字节)为单位的。

    3、文件类型指针
    考试中,记住FILE就是文件类型名,它是一个结构体类型。
    一个文件进行操作,通过文件指针进行的,定义如下:

    FILE * fp,* in,* out;

    文件操作一般为四步:
    第一步,建立文件类型指针;
    第二步,打开/关闭
    第三步,进行读写操作;
    第四步,指针定位

    (二)文件的打开与关闭

    1、文件的打开(fopen()函数)

    格式:fopen(文件名,文件使用方式)
    功能:按指定的“使用方式”打开文件,函数返回所打开文件的指针,该指针的基类型为文件类型。文件名和文件使用方式均为字符串。
    如:以只读方式打开文件data.txt,并用指针变量fp指向它。

    FILE * fp;
    fp=fopen("data.txt","r");
    

    打开文件的“使用方式”:
    "r":打开已存在文件
    "w":刷新写,创建写
    “a”:追加写,创建写
    “+”:增强功能
    “r+” "w+" "a+" b:二进制文件
    "rb" "wb" "ab"
    "rb+" “wb+" "ab+"
    注:
    (1)文件使用方式只能用小写字母,文件名用大写或小写均一样。如:

    FLIE*fp;
    fp=fopen("c:\\tc\\data.txt","w");
    

    (2)在“文件使用方式”中若含有字母b,则打开的是一个二进制文件(bit)。
    (3)当fopen“打开”失败时,函数返回NULL。

    if((fp=fopen(文件名,文件使用方式))==NULL)
    {printf("can not open this fileln");
    exit(0);
    }
    
    2、文件的关闭(fclose函数)

    文件使用完后应该关闭该文件。
    格式:fclose(文件指针)
    如:fclose(fp);

    (1)fputc()

    格式:fputc(字符,文件指针)
    功能:把一个字符写到文件指针所指的文件中。其中字符可以是字符常量也可以是字符变量。若输出成功则函数返回输出的字符,失败则返回EOF(stdio.h中宏定义为-1)。

    (2)fgetc()

    格式:fgetc(文件指针)
    功能:从文件指针所指文件中读取一个字符。若读取成功则函数返回读取的字符,失败(遇到文件结束)则返回EOF。

    char ch;
    ch=fgetc(fp);
    
    (3)fgets()

    格式:fgets(str,n,fp)
    功能:其中str表示一个字符指针,可以是字符数组名也可以是字符指针变量名。从fp所指文件中读取n-1个字符(不是n个字符),并在这些字符的最后加一个字符串结束符'\0’后赋给str。
    函数返回str的首地址。

    (4)fputs()

    格式:fputs(str,fp)
    功能:向fp所指文件中写(输出)str中的字符串,str可以是字符串常量、字符数组或字符指针变量。在输出时字符串的结束符’\0’不输出。若输出成功则返回0,失败返回EO F。

    (5)fread()、fwrite()格式:
    fread(buffer,size,count,fp);
    fwrite(buffer,size,count,fp);
    

    其中:
    buffer是数据的地址
    size是每次读写的字节数
    count表示让函数进行多少次的读写fp是要进行读写的文件指针变量功能:用来读写一个连续的数据块注:
    (1)这两个函数按二进制方式进行读写。

    (6)fprintf()、fscanf()(按格式的读写)

    格式:
    fprintf(文件指针,格式说明符,输出列表);
    fscanf(文件指针,格式说明符,输入列表)
    功能:按格式说明符所指定的格式向文件中读写(输入输出)数据。
    其中格式说明符和输入(输出)列表的用法与scanf和printf函数相同。

    补充:feof(文件指针)

    作用是测试文件的当前读写位置是否在文件末尾,若是则返回非0(1)值(真),否则返回0(假)。在末尾返回1,不在末尾返回0

    //遍历方式
    while(!feof(fp))
    {//读写文件
    }
    

    (四)文件当前读写位置函数

    (1)重新定位指针

    格式:rewind(文件指针)
    作用:使当前的读写位置重新指向文件的开头。函数无返回值。

    (2)fseek()

    格式:fseek(文件指针,位移量,起始点)
    功能:将当前的读写位置从“起始点”开始按“位移量”所指定的移动字节数向后移动。
    起始点有:(宏名和宏内容)
    SEEK_SET 或0(表示“文件的开始”)
    SEEK_CUR 或1(表示“当前位置”)
    SEEK END 或2(表示文件末尾)
    位移量:要在数值后加字母l或L(表示长整形)。
    如:

    fseek(fp,100L,SEEK_SET)(100个字节)
    例题分析:
    将位置指针定位到离文件头50个字节的地方
    fseek(fp,50l,0);
    例题分析:
    将位置指针定位到离文件末尾50个字节的地方
    fseek(fp,-50l,2);
    例题分析:
    将位置指针定位到离文件头0个字节的地方
    1.fp=fopen();
    2.rewind();
    3.fseek(fp,0l,0);
    
    (3)ftell()

    格式:ftel1(文件指针)
    功能:返回当前文件的位置,用相对于文件头的位移量表示。若返回-1L表示出错。
    求文件长度

    int filelength;
    FILE *fp;
    fp=fopen();
    fseek(fp,0l,2);
    filelength=ftell();
    fclose();
    
    exit();

    相关文章

      网友评论

          本文标题:C语言之位运算和文件操作

          本文链接:https://www.haomeiwen.com/subject/ofpjvqtx.html