清华大学出版社 TSINGHUA UNIVERSITY PRESS 第12章 位运算 12.1 位运算符和位运算 12.2 位运算举例 12.3 位段 习题
第12章 位运算 12.1 位运算符和位运算 12.2 位运算举例 12.3 位段 习题
清华大学出版社 TSINGHUA UNIVERSITY PRESS ·C语言是为描述系统而设计的,因此它应当具有汇编 语言所能完成的一些功能。C语言既具有高级语言的 特点,又具有低级语言的功能,因而具有广泛的用途 和很强的生命力。第9章介绍的指针运算和本章将介 绍的位运算就很适合于编写系统软件的需要,是C语 言的重要特色。在计算机用于检测和控制领域中要用 到位运算的知识,因此读者应当学习和掌握本章的内 容。 。 所谓位运算是指进行二进制位的运算。在系统软件中, 常要处理二进位的问题。例如,将一个存储单元中的 各二进位左移或右移一位,两个数按位相加等。C语 言提供位运算的功能,与其他高级语言(如PASCAL) 相比,它显然具有很大的优越性
• C语言是为描述系统而设计的,因此它应当具有汇编 语言所能完成的一些功能。C语言既具有高级语言的 特点,又具有低级语言的功能,因而具有广泛的用途 和很强的生命力。第9章介绍的指针运算和本章将介 绍的位运算就很适合于编写系统软件的需要,是C语 言的重要特色。在计算机用于检测和控制领域中要用 到位运算的知识,因此读者应当学习和掌握本章的内 容。 • 所谓位运算是指进行二进制位的运算。在系统软件中, 常要处理二进位的问题。例如,将一个存储单元中的 各二进位左移或右移一位,两个数按位相加等。C语 言提供位运算的功能,与其他高级语言(如PASCAL) 相比,它显然具有很大的优越性
清华大学出版社 TSINGHUA UNIVERSITY PRESS 12.1位运算符和位运算 12.1.1“按位与”运算符(&) ·参加运算的两个数据,按二进位进行“与”运算。 如果两个相应的二进位都为1,则该位的结果值为 1,否则为0。即 0&0=0;0&1=0;1&0=0;1&1=1; ·例如:3&5并不等于8,应该是按位与。 3=00000011 (&)5=00000101 00000001
12.1.1 “按位与”运算符(&) • 参加运算的两个数据,按二进位进行“与”运算。 如果两个相应的二进位都为1,则该位的结果值为 1,否则为0。即 • 0&0=0;0&1=0;1&0=0;1&1=1; • 例如: 3&5 并不等于8,应该是按位与。 3 = 00000011 (&) 5 = 00000101 00000001 12.1 位运算符和位运算
清华大学出版社 TSINGHUA UNIVERSITY PRESS 因此,3&5的值得1。如果参加&是负数运算的是 负数(如3&5),则以补码形式表示为二进制数, 然后按位进行“与”运算。 按位与有一些特殊的用途: (①)清零。如果想将一个单元清零,即使其全部 二进位为0,只要找一个二进制数,其中各个位 符合以下条件:原来的数中为1的位,新数中相 应位为0。然后使二者进行&运算,即可达到清 零目的。 如:原有数为00101011,另找一个数,设它为 10010100,它符合以上条件,即在原数为1的位 置上,它的位值均为0。将两个数进行&运算:
因此,3&5的值得1。如果参加&是负数运算的是 负数(如-3 & -5),则以补码形式表示为二进制数, 然后按位进行“与”运算。 按位与有一些特殊的用途: (1) 清零。 如果想将一个单元清零,即使其全部 二进位为0,只要找一个二进制数,其中各个位 符合以下条件:原来的数中为1的位,新数中相 应位为0。然后使二者进行&运算,即可达到清 零目的。 如:原有数为00101011,另找一个数,设它为 10010100,它符合以上条件,即在原数为1的位 置上,它的位值均为0。将两个数进行&运算:
清华大学出版社 TSINGHUA UNIVERSITY PRESS 00101011 (&)10010100 00000000 ·其道理是显然的。当然也可以不用10010100这个 数而用其他数(如01000100)也可以,只要符合上述 条件即可。 ·(2)取一个数中某些指定位。如有一个整数a(2个 字节),想要其中的低字节。只需将a与(737)8按位 与即可。见图12.1
00101011 (&) 10010100 00000000 • 其道理是显然的。当然也可以不用10010100这个 数而用其他数(如01000100)也可以,只要符合上述 条件即可。 • (2) 取一个数中某些指定位。如有一个整数a(2个 字节),想要其中的低字节。只需将a与(737)8按位 与即可。见图12.1