WenzhouUniversityWenzhouUniversity1TheCProgrammingLanguageTheCProgrammingLanguage程序设计基础程序设计基础TheCProgrammingLanguageWenzhouUniversityWenzhouUniversity2TheCProgrammingLanguageTheCProgrammingLanguage本章要点位运算的种类各种位运算的规则WenzhouUniversityWenzhouUniversity3TheCProgrammingLanguageTheCProgrammingLanguage位运算C语言与其他高级语言相比较,一个比较有特色的地方就是位运算,利用位运算可以实现许多汇编语言才能实现的功能。WenzhouUniversityWenzhouUniversity4TheCProgrammingLanguageTheCProgrammingLanguage一、实例导入WenzhouUniversityWenzhouUniversity5TheCProgrammingLanguageTheCProgrammingLanguage例10.1统计x中值为1的二进制位的个数。输入样例:15输出样例:4WenzhouUniversityWenzhouUniversity6TheCProgrammingLanguageTheCProgrammingLanguageintbitcount(unsignedx){intb=0;while(x){if(x&01)b++;x>>=1;/*x右移一位*/}returnb;}WenzhouUniversityWenzhouUniversity7TheCProgrammingLanguageTheCProgrammingLanguage#includeintmain(){intn;scanf("%d",&n);printf("%d\n",bitcount(n));return0;}WenzhouUniversityWenzhouUniversity8TheCProgrammingLanguageTheCProgrammingLanguage说明:这里将x声明为无符号类型是为了保证将x右移时,无论该程序在什么机器上运行,左边空出的位都用0(而不是符号位)填补。WenzhouUniversityWenzhouUniversity9TheCProgrammingLanguageTheCProgrammingLanguage二、位运算符C语言提供了6个位操作运算符。这些运算符只能作用于带符号或无符号的char、short、int与long类型。&按位与|按位或^按位异或<<左移>>右移~按位求反WenzhouUniversityWenzhouUniversity10TheCProgrammingLanguageTheCProgrammingLanguage注意:位运算符&、|同逻辑运算符&&、||的区别,后者用于从左至右求表达式的真值。例如,如果x的值为1,y的值为2,那么,x&y的结果为0,而x&&y的值为1。WenzhouUniversityWenzhouUniversity11TheCProgrammingLanguageTheCProgrammingLanguage1、“按位与”运算符(&)00001001(9的二进制补码)&00000101(5的二进制补码)00000001(1的二进制补码)按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式如下:按位与运算符“&”经常用于屏蔽某些二进制位。WenzhouUniversityWenzhouUniversity12TheCProgrammingLanguageTheCProgrammingLanguage2、“按位或”运算符(|)00110000|0000111100111111按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为1时,结果位就为1。即0|0=0,0|1=1,1|0=1,1|1=1。参与运算的两个数均以补码出现。)例如,想使一个数a的低4位改为1,只需将a与017进行按位或运算即可。例如,060|017,将八进制数60与八进制数17进行按位或运算,算式如下:按位或运算符“|”常用于将某些二进制位置为1。WenzhouUniversityWenzhouUniversity13TheCProgrammingLanguageTheCProgrammingLanguage3、“按位异或”运算符(^)00111001^0010101000010011按位异或运算符“^”是双目运算符,也称XOR运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。例:071^052=023(八进制数)WenzhouUniversityWenzhouUniversity14TheCProgrammingLanguageTheCProgrammingLanguage一元运算符~用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。例如:x=x&~077把x的最后6位设置为0。注意:表达式x&~077与机器字长无关,它比形式为x&0177700的表达式要好,因为后者假定x是16位的数值。这种可移植的形式并没有增加额外开销,因为~077是常量表达式,可以在编译时求值。4、“按位取反”运算符(~)WenzhouUniversityWenzhouUniversity15TheCProgrammingLanguageTheCProgrammingLanguage5、移位运算符(<<与>>)移位运...