【计算机】06 位运算.pptVIP

  • 0
  • 0
  • 约1.15万字
  • 约 51页
  • 2018-02-26 发布于江苏
  • 举报
【计算机】06 位运算

第6章 位 运 算 6.1 位运算符及位运算表达式 位运算是对二进制数据以位为单位(bit)进行的运算。C语言提供了六种位运算符。参加运算的操作数可以是char类型、int类型和long类型的变量或常量。实型是不能进行位运算的。表6.1.1列出了所有位操作的运算符。 按位运算符把操作对象看作是二进制数,并以位为单位地对它们进行运算,运算的结果为整型数,可用十进制数、八进制数或十六进制数表示。 移位运算的优先级排在算术运算之后,关系运算之前。 6.2 位逻辑运算 表6.2.1给出四种按位逻辑运算符的运算规则。表中a和b是位运算对象的二进制位值。 表6.2.1 例6.2.1 设有无符号整型变量x和y,它们的值用八进制和二进制表示如下: ? x=0112(0000000001001010) y=0123(0000000001010011) ? 计算表达式~x,xy,x|y和x^y的值。 根据表6.1.2所示相应位逻辑运算符的定义,上列表达式计算如下: x 0 000 000 001 001 010 x 0 000 000 001 001 010 ~ 1 111 111 110 110 101 y 0 000 000 001 010 011 xy 0 000 000 001 000 010 x 0 000 000 001 001 010 X 0 000 000 001 001 010 y 0 000 000 001 010 011 y 0 000 000 001 010 011 x|y 0 000 000 001 011 011 x^y 0 000 000 000 011 001 得表达式 ~x 的八进制值和二进制值分别为:177665 ( 1111111110110101 ) 表达式 xy 的八进制值和二进制值分别为:为0102 ( 0000000001000010 ) 表达式 x|y 的八进制值和二进制值分别为: 0133 ( 0000000001011011 ) 表达式 x^y 的八进制值和二进制值分别为:031 ( 0000000000011001 ) 例6.2.2 对两个整型数a和b进行“位非”、“位与”、“位或”和“位异或”运算并输出运算结果。操作数和运算结果都用八进制数表示。 程序如下: #includestdio.h main() { 程序的输出为: ~112=177665 112123=102 112|123=133 112^123=31 位逻辑运算的重要应用之一,是对数据的某一位或若干位(二进制)进行处理。如判断某一位是否为0或为1;将某一位或若干位反转,将某位或若干位置0或置1等等。一般的处理原则可以简单归纳如下: 一个二进制位与1进行“位或”运算,能使该位的值为1,与0进行“位或”运算,能使该位的值保持不变。 一个二进制位与1进行“位与”运算,如果结果为0,则可判定该位原来值为0,反之,可判断该位原来值为1;与0进行“位与”运算,则可置该位为0。 一个二进制位与1进行“位异或”运算,可使该为取反。 例6.2.3 编写程序,用户输入一个字符,程序输出该字符ASCII码的二进制值。 字符在内存中占一个字节。判断数据的某一位是0还是1,可利用上述的“按位与”运算实现。如果要想知道字符的最高位的值,可以用第8位为1其余位为0的数(十进制数的128)与该字符的值进行“按位与”运算。其结果就是该字符第8位的值。用同样方法可以求出其他各位的值。 例如,字符A的ASCII码为:0100 0001,如要判断第8(最高)位是1还是0,可用数128(1000 0000)与之进行“位与”运算: 0000 0000 结果为0,由此可知,字符A的ASCII码的第8位为0。为判断第7位,则需要用数128/2,即64,来与ASCII码进行“位与”运算,依此类推,可以求出所有各位二进制码。根据这个原理,编写出程序如下: #include stdio.h main() { char ch; int I; printf(enter a char:); scanf(%c, ch); for(i=128; i0; i=i/2) { if(ich) pr

文档评论(0)

1亿VIP精品文档

相关文档