第11-1课 位运算及文件
- 格式:doc
- 大小:73.00 KB
- 文档页数:5
位运算总结(按位与,或,异或)按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。
另,负数按补码形式参加按位与运算。
“与运算”的特殊用途:(1)清零。
如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
(2)取一个数中指定位方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,取X的低4位,用 X & 0000 1111 = 00001110 即可得到;还可用来取X的2、4、6位。
按位或运算符(|)参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;即:参加运算的两个对象只要有一个为1,其值为1。
例如:3|5 即 00000011 | 0000 0101 = 00000111 因此,3|5的值得7。
另,负数按补码形式参加按位或运算。
“或运算”特殊作用:(1)常用来对一个数据的某些位置1。
方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。
此数与X相或可使X中的某些位置1。
例:将X=10100000的低4位置1 ,用X | 0000 1111 = 1010 1111即可得到。
异或运算符(^)参加运算的两个数据,按二进制位进行“异或”运算。
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
“异或运算”的特殊作用:(1)使特定位翻转找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。
位运算是指按二进制进行的运算。
在系统软件中,常常需要处理二进制位的问题。
C语言提供了6个位操作运算符。
这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。
C语言提供的位运算符列表:运算符含义描述& 按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 << 左移用来将一个数的各二进制位全部左移N位,右补0>> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补01、“按位与”运算符(&)按位与是指:参加运算的两个数据,按二进制位进行“与”运算。
如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。
这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。
按位与其实与逻辑上“与”的运算规则一致。
逻辑上的“与”,要求运算数全真,结果才为真。
若,A=true,B=true,则A∩B=true 例如:3&5 3的二进制编码是11(2)。
(为了区分十进制和其他进制,本文规定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。
位是用以描述电脑数据量的最小单位。
二进制系统中,每个0或1就是一个位。
将11(2)补足成一个字节,则是00000011(2)。
5的二进制编码是101(2),将其补足成一个字节,则是00000101(2)按位与运算:00000011(2)&00000101(2)00000001(2)由此可知3&5=1c语言代码:#include <stdio.h>main(){int a=3;int b = 5;printf("%d",a&b);}按位与的用途:(1)清零若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数中为1的位,新数中相应位为0。
位运算与运算位运算和与运算是计算机科学中非常重要的概念和操作符。
它们在计算机底层的数据处理和逻辑运算中起着重要的作用。
本文将对位运算和与运算进行详细的介绍和解释。
一、位运算位运算是对二进制数据进行操作的一种运算方式。
计算机内部的数据都是以二进制形式存储和处理的,位运算正是利用了二进制的特性来进行数据的操作。
常见的位运算符有与(&)、或(|)、异或(^)、取反(~)等。
1. 与运算(&)与运算是对两个二进制数的每一位进行逻辑与操作,只有在两个位都为1时,结果才为1;否则结果为0。
与运算常用于屏蔽某些位的值,或者判断某些位是否同时为1。
2. 或运算(|)或运算是对两个二进制数的每一位进行逻辑或操作,只要两个位中有一个为1,结果就为1;否则结果为0。
或运算常用于设置某些位的值,或者判断某些位是否有1。
3. 异或运算(^)异或运算是对两个二进制数的每一位进行逻辑异或操作,只有在两个位不同时,结果才为1;否则结果为0。
异或运算常用于数据的交换和判断两个值是否相等。
4. 取反运算(~)取反运算是对一个二进制数的每一位进行取反操作,即1变为0,0变为1。
取反运算常用于求补码或者将某些位反转。
二、与运算与运算是位运算的一种,它是对两个二进制数的每一位进行与操作,只有在两个位都为1时,结果才为1;否则结果为0。
与运算常用于逻辑判断、数据屏蔽等方面。
与运算的特点有:1. 与运算满足交换律和结合律,即a & b = b & a,(a & b) & c =a & (b & c)。
2. 与运算可以用来屏蔽某些位的值,只保留需要的位。
3. 与运算可以用来判断某些位是否同时为1。
在计算机中,与运算广泛应用于各个领域,例如网络通信中的IP地址子网划分、图形图像处理中的像素操作、逻辑判断中的条件判断等。
与运算的应用举例:1. 判断一个整数是否为偶数:偶数的二进制表示最后一位为0,可以通过与运算来判断。
《程序设计基础Ⅱ》课程教学大纲一、课程与任课教师基本信息二、课程简介《程序设计基础》是为软件工程专业开设的第一门程序设计课程。
本课程以C语言为载体,介绍程序设计语言的基本概念、结构化程序设计的一般方法以及算法的概念及其表示方式,C语言的基本数据类型及其运算、三种基本程序控制结构、编译预处理、数组、函数的嵌套调用与递归调用、结构体与共用体、指针及其应用、文件及其操作等,为后续其它程序设计语言与工具、学科基础课程、专业课程学习提供程序设计的基础。
三、课程目标结合专业培养目标,提出本课程要达到的目标。
这些目标包括:1.知识与技能目标通过本课程的学习,理解算法的概念与表示方式,掌握用程序框图或N-S 图对问题解决的算法思想的描述和表达。
掌握C语言的基本数据类型及其运算、三种基本程序控制结构、编译预处理、数组、函数的嵌套调用与递归调用、结构体与共用体、指针及其应用、文件及其操作。
通过学习和实践,逐步掌握程序设计的基本思想和方法,培养问题求解和语言的应用能力。
为后续课程打好基础。
2.过程与方法目标在本课程的学习过程中,学生将学习结构化程序设计的基本思想、方法。
通过大量的编程实践,使学生初步具备对现实世界问题进行抽象思维和分析,对解决问题的算法思想进行描述和表达的能力。
理解程序错误的主要方面与原因,掌握程序调试与排除错误的基本方法,培养良好的程序设计和调试能力。
3.情感、态度与价值观发展目标通过本课程的学习,使学生了解学习与运用、学习与能力的辩证关系。
培养学生独立思考、合理分配和利用时间、不断总结、提高学习效率的良好学习方法。
坚持不懈、勤于思考、严谨治学的科学态度,为未来的学习、工作奠定良好基础。
四、与前后课程的联系本课程是软件工程专业开设的第一门程序设计课程。
本课程讲授的内容在后续的专业基础课程和专业课程,如:算法与数据结构、操作系统、以及其它后续程序设计语言与工具课程中都有具体体现,是学习好上述后续课程重要基础。
位运算符的运算规则位运算是一种对二进制数进行操作的运算方式,常见的位运算符包括位与(&)、位或(,)、位非(~)、位异或(^)、左移(<<)和右移(>>)。
下面将对每个位运算符的运算规则进行详细介绍。
1.位与(&)运算:位与运算符用来对两个操作数中相应位置的二进制数进行“与”操作,如果对应位置上的两个二进制数都为1,则结果为1;否则为0。
位与运算的规则如下:-1&1=1-1&0=0-0&1=0-0&0=0例如:10&6=2,二进制表示为1010&0110=0010。
2.位或(,)运算:位或运算符用来对两个操作数中相应位置的二进制数进行“或”操作,如果对应位置上的两个二进制数有一个为1,则结果为1;否则为0。
位或运算的规则如下:-1,1=1-1,0=1-0,1=1-0,0=0例如:10,6=14,二进制表示为1010,0110=1110。
3.位非(~)运算:位非运算符用来对操作数中的二进制数进行按位取反操作,即将1变为0,将0变为1、位非运算的规则如下:-~1=0-~0=1例如:~10=-11,二进制表示为~1010=-10114.位异或(^)运算:位异或运算符用来对两个操作数中相应位置的二进制数进行“异或”操作,如果对应位置上的两个二进制数不同,则结果为1;否则为0。
位异或运算的规则如下:-1^1=0-1^0=1-0^1=1-0^0=0例如:10^6=12,二进制表示为1010^0110=1100。
5.左移(<<)运算:左移运算将一个数的二进制表示向左移动指定的位数,右边空出的位用0填充。
左移运算的规则如下:6.右移(>>)运算:右移运算将一个数的二进制表示向右移动指定的位数,左边空出的位用符号位填充(正数用0,负数用1)。
右移运算的规则如下:例如:10>>2=2,二进制表示为1010>>2=10。
《C语言程序设计》课程标准一、课程说明《C语言程序设计》课程标准课程编码〔34856〕承担单位〔计算机信息学院〕制定〔〕制定日期〔2022年11月16日〕审核〔专业指导委员会〕审核日期〔2022年11月20日〕批准〔二级学院(部)院长〕批准日期〔2022年11月28日〕(1)课程性质:《C语言程序设计》课程是高职高专计算机类和电子信息类各专业的专业基础课和职业素质必修课,旨在培养高职学生计算机编程基本思想、编程基本技能及逻辑思维能力,掌握运用C语言编程来解决岗位工作中实际问题的方法和步骤,为提高职业能力和拓展职业空间打下坚实基础。
本课程是电子信息类专业公共平台课程。
(2)课程任务:主要针对软件设计,程序设计员等岗位开设,主要任务是培养学生在软件设计,程序设计员等岗位的编程和思维能力,要求学生掌握编写程序方面的基本技能。
(3)课程衔接:在课程设置上,前导课程有《计算机基础》课程,后续课程有《数据结构》、《Java程序设计》、《软件工程》等。
二、学习目标(一)总体目标通过本课程的教学,掌握C语言程序设计的基础知识和基本技能,树立结构化程序设计的基本思想,养成良好的编程习惯,培养严谨务实的分析问题与解决问题能力,并为后续的应用性课程和系统开发课程打好软件基础。
(二)具体目标➢方法能力目标:(1)学会思考问题,能够将理论与实际相结合。
(2)通过反复实践和练习,提高分析问题和解决问题的能力(3)培养学生独立获取知识和协作学习的能力,具备创新意识等。
➢社会能力目标(1)程序的编译、连接;(2)程序错误的排查;(3)C语言程序的调试;(4)解决实际问题的基本能力。
➢专业能力目标(1)职业能力目标①培养并加强学生自主探索学习和相互协作解决问题的意识。
②培养学生谦虚、好学的能力,勇于创新、敬业乐业的工作作风。
③培养学生解决实际应用问题的能力,能使用C语言开发一个小型管理系统(如:学生学籍管理系统)。
使学生了解C语言的发展及趋势,为后续学习进阶打下基础。
位运算总结(左移、右移、按位与、按位或、按位⾮、按位异或)刷题的时候碰见了⼀些位运算,有印象但是对它们的算法实际⽤处不了解,于是就再次回顾⼀下其表现特征,归纳⼀下了解到的知识点~参考:规则:正数:反码、原码、补码相同,符号位为0负数:反码,符号位为1,数值位按位取反补码,反码+1已知负数补码求原码:符号位不变,数值位减1再取反;或者,符号位不变,数值位取反后再加1左移的特征:⽤来倍增(乘2^n,n为移动的数值)。
NSLog(@"1左移-->%d",1<<1);//0001 -->2NSLog(@"2左移-->%d",2<<1);//0010 -->4NSLog(@"3左移-->%d",3<<1);//0011 -->6NSLog(@"4左移-->%d",4<<1);//0100 -->8NSLog(@"5左移-->%d",5<<1);//0101 -->10NSLog(@"6左移-->%d",6<<1);//0110 -->12NSLog(@"7左移-->%d",7<<1);//0111 -->14NSLog(@"8左移-->%d",8<<1);//1000 -->16右移的特征:⽤来整除(除2^n,n为移动的数值)并舍去余数。
NSLog(@"1右移-->%d",1>>1);//0001 -->0NSLog(@"2右移-->%d",2>>1);//0010 -->1NSLog(@"3右移-->%d",3>>1);//0011 -->1NSLog(@"4右移-->%d",4>>1);//0100 -->2NSLog(@"5右移-->%d",5>>1);//0101 -->2NSLog(@"6右移-->%d",6>>1);//0110 -->3NSLog(@"7右移-->%d",7>>1);//0111 -->3NSLog(@"8右移-->%d",8>>1);//1000 -->4与的特征:只有两个数的⼆进制同时为1,结果才为1,否则为0,与1运算,可以判断奇偶性。
第11-1课位运算及文件一、教学目标1、位运算符2、文件操作二、教学过程12、位运算符的运算功能(1) “按位取反”运算:把运算对象的内容按位取反(使每一位上的0变1,1变0)【例】~a&b00001100 (12的二进制补码)11110011 (12的二进制按位取反形式)00001010 (10的二进制补码)00000010 (2的二进制补码)main(){ int a=12,b=10,c;c=~a&b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}(2) “左移”运算(<<):运算符左边是移动对象,右边是整形表达式,代表左移的位数。
左移时,右端(低位)补0;左端(高位)移出的部分舍弃。
【例】1<<20000 0001 (1的二进制形式)0000 0100 (左移两位后的形式,十进制得4)main(){ int a=1,b=2,c;c=a<<b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}(3) “右移”运算(>>):右移运算与左移运算相同,只是移位方向相反。
右移时,右端(低位)移出的二进制数舍弃,左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1.【例】5>>10000 0101 (5的二进制形式)0000 0010 (右移一位后,十进制得2)main(){ int a=5,b=1,c;c=a>>b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}(4) “按位与”运算:把参加运算的两个运算数按对应的二进制位分别进行“与”运算,当两个相应的位都为1时,该位的结果为1;否则为0。
【例】12&10可写算式如下:00001100 (12的二进制补码)&00001010 (10的二进制补码)00001000 (8的二进制补码)可见12&10=8。
【例】main(){ int a=12,b=10,c;c=a&b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}(5) “按位异或”运算:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为0;若数不同,该位的结果为1。
00001100 (12的二进制补码)^00001010 (10的二进制补码)00000110 (6的二进制补码)可见12^10=6。
【例】main(){ int a=12,b=10,c;c=a^b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}(6) “按位或”运算(|):参加运算的两个运算数中,只要两个相应的二进制位中一个为1,则该位的运算结果即为1;只有当两个相应位的数都为0时,该位的运算结果才为0。
【例】12|1000001100 (12的二进制形式)00001010 (10的二进制形式)00001110 (14的二进制形式)main(){ int a=12,b=10,c;c=a|b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);}3、文件概念(1) 文件与文件名所谓“文件”是指一组相关数据的有序集合。
之前已多次使用了文件,如:源程序文件、目标文件、可执行文件、库文件(头文件)等。
这个数据集有一个名称,叫文件名。
文件名的一般结构为:文件名.扩展名。
(2) 文件分类1) 根据文件内容,可分为程序文件和数据文件,程序文件可以分为源文件、目标文件和可执行文件。
在C语言编译环境下的后缀名c文件、obj文件和exe文件。
2) 根据文件的组织形式,可以分为顺序文件和随机文件。
3) 根据编码文件编码的方式,可分为ASCII码文件和二进制文件。
4、文件指针【格式】FILE *指针变量名【例】FILE *fp; //定义为指向文件类型的指针变量(文件指针)5、文件操作(1) 打开文件(fopen函数)【格式】fopen(文件名,文件使用方式);//该函数返回一个指向FILE类型的指针【例】FILE *fp;fp=fopen("file_a","r");说明:是在当前目录下打开文件file_a,只允许进行“读”操作,并使fp指向该文件。
(2) 关闭文件(fclose函数)【格式】fclose(文件指针)说明:将文件指针与文件脱离联系。
成功执行关闭操作时,函数返回0,否则返回非0.【程序举例】#include "stdio.h"main(){ F ILE *fp1;fp1=fopen("f1.txt","a");fprintf(fp1,"I 服了You");fclose(fp1);}6、格式化读函数和写函数(1) 格式化读(fprintf函数):将输出列表按格式字符串的形式输出到文件指针指定文件。
格式:fprintf(文件指针,格式字符串,输出列表);【程序举例】#include "stdio.h"main(){ FILE *fp;int m=150;float n=3.14;fp=fopen("f1.txt","w");fprintf(fp,"%d\n%f\n",m,n);fclose(fp);}(2) 格式化写(fscanf函数):将文件指针对应的文件中的内容按照格式字符串的形式输入到输入列表中。
格式:fscanf(文件指针,格式字符串,输出列表);【程序举例】#include "stdio.h"main(){ FILE *fp;int m=150;float n=3.14;fp=fopen("f1.txt","r");fscanf(fp,"%d,%f",&m,&n);printf("%d\n%f\n",m,n);fclose(fp);}7、读写字符函数(1) 读字符函数(fputc) :将字符(ch的值) 输出到fp所指向的文件【格式】fputc(ch,fp)【程序举例】#include "stdio.h"main(){ F ILE *fp;char ch;if((fp=fopen("f1.txt","w"))==NULL){ printf("不能打开此文件");exit(1); //出现异常退出}ch=getchar();while(ch!='#'){ fputc(ch,fp);ch=getchar();}fclose(fp);}(2) 写字符函数(fgetc) : 从文件指针对应的文件读入一个字符赋给ch.【格式】ch=fgetc(ch,fp)【程序举例】#include<stdio.h>main(){ FILE *fp;char ch;if((fp=fopen("f1.txt","r"))==NULL){ printf("不能打开此文件!");getch();exit(1);}ch=fgetc(fp);while(ch!=EOF){ putchar(ch);ch=fgetc(fp);}fclose(fp);}8、读写字符串函数(1) 读字符串函数(fgets) :从fp指向的文件读出不超过n-1个字符,并把它们存放到字符数组str中,如果读入n-1个字符结束之前遇到换行符或EOF,读入即结束。
字符串读入会在最后加一个‘\0’,fgets函数返回值为str首地址.【格式】fgets(str,n,fp)【程序举例】#include<stdio.h>main(){ FILE *fp;char str[11];if((fp=fopen("f1.txt","rt"))==NULL){printf("\nCannot open file strike any key exit!");exit(1);}fgets(str,9,fp);printf("%s\n",str);fclose(fp);}(2) 写字符串函数(fputs) :将字符串str写入到fp所对应的文件中【格式】fputs(str,fp)【程序举例】#include<stdio.h>main(){ FILE *fp;char str[10]="abcdefg";fp=fopen("f1.txt","w");fputs(str,fp);fclose(fp);}9、件结束检测函数feof函数【格式】feof(文件指针);功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。
三、题型分析。