c语⾔⽤位运算将⼀个数清零,C语⾔之位运算和⽂件操作⼀、位运算
按位计算
位运算的操作对象只能是整型或字符型数据。
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位后得到的值为该数乘以2的n次⽅的积。
6、按位右移运算(>>)
fprintf格式格式:数>>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(⽂件名,⽂件使⽤⽅式)
功能:按指定的“使⽤⽅式”打开⽂件,函数返回所打开⽂件的指针,该指针的基类型为⽂件类型。⽂件名和⽂件使⽤⽅式均为字符串。如:以只读⽅式打开⽂件,并⽤指针变量fp指向它。
FILE * fp;
fp=fopen("","r");
打开⽂件的“使⽤⽅式”:
"r":打开已存在⽂件
"w":刷新写,创建写
“a”:追加写,创建写
“+”:增强功能
“r+” "w+" "a+" b:⼆进制⽂件
"rb" "wb" "ab"
"rb+" “wb+" "ab+"
注:
(1)⽂件使⽤⽅式只能⽤⼩写字母,⽂件名⽤⼤写或⼩写均⼀样。如:
FLIE*fp;
fp=fopen("c:\\tc\\","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();
3.fseek(fp,0l,0);
(3)ftell()
格式:ftel1(⽂件指针)
功能:返回当前⽂件的位置,⽤相对于⽂件头的位移量表⽰。若返回-1L表⽰出错。
求⽂件长度
int filelength;
FILE *fp;
fp=fopen();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论