C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方斌制作
C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方 斌 制作
第12章位运算 §12.1概述 §12.4位段 §12.2位运算 本章要求及作业 §12.3位运算举例
§12.1 概述 §12.4 位段 §12.2 位运算 本章要求及作业 §12.3 位运算举例 第12章 位运算
11.1概述 位运算:是指进行二进制位的运算 一、字节与位 位(Bit):二进制位是计算机中最小的信息单位。 位二进制能表达两个信息“0“和“1" 2位二进制能表达4个信息:00011011 2位二进制能表达8个信息:000001010011100101110111 8位二进制能表达256个信息:0000,0000……1111,1111 n位二进制能表达2个信息
11.1 概述 位运算: 是指进行二进制位的运算。 一、字节与位 位(Bit): 二进制位是计算机中最小的信息单位。 一位二进制能表达两个信息“0”和“1”。 2位二进制能表达4个信息:00 01 10 11 2位二进制能表达8个信息:000 001 010 011 100 101 110 111 8位二进制能表达256个信息:0000,0000 ....... 1111,1111 n位二进制能表达 个信息
为什么用二进制位作为计算机中最小的信息单位? 电子计算机的主要部件(CPU、存储器等)是由成千上万的数字电路 组成的,每一个电路有两种稳定的工作状态,可以方便地表示一位二 进制的“0和“1″。 一般用字节(Byte)作为计算机信息的基本单位,一个字节由8个二 进制位组成,其中最右边的一位称为“最低有效位”LSB,最左面的 位称为“最高有效位”MSB。 一般用1字节、2字节、4字节、8字节表示一个信息。例如,用1字 节表示一个英文字符,2字节表示一个汉字字符,4字节表示一个实 数,…等。 打印机状态: 某些信息可以用一位二进制表达,如: bt0:打印机在规定的时间内 5|43120 未完成上一次指定的操作。 bt5:打印机当前缺纸。 bt7:打印机当前准备好
为什么用二进制位作为计算机中最小的信息单位? 电子计算机的主要部件(CPU、存储器等)是由成千上万的数字电路 组成的,每一个电路有两种稳定的工作状态,可以方便地表示一位二 进制的“0”和“1”。 一般用字节(Byte)作为计算机信息的基本单位,一个字节由8个二 进制位组成,其中最右边的一位称为“最低有效位”LSB,最左面的 一位称为“最高有效位”MSB。 一般用1字节、2字节、4字节、8字节表示一个信息。例如,用1字 节表示一个英文字符,2字节表示一个汉字字符,4字节表示一个实 数,....等。 某些信息可以用一位二进制表达,如: 打印机状态: bit0: 打印机在规定的时间内 未完成上一次指定的操作。 bit5: 打印机当前缺纸。 bit7: 打印机当前准备好
二、数的表达方式 可以用1字节、2字节、4字节或8字节表示一个数。以下用1字节的情况 为例。 1、无符号数 无符号数只有值,没有符号,1字节无符号数表达的数的范围: 0000,0000~1111,1111,即0~255。 2、有符号数 如何表示符号?如何表达值? 以1字节表示有符号数,最高位b7表示符号,bit6~bit0表示值。 以2字节表示有符号数,最高位bt15表示符号,bt14~bto表示值。 符号的表示方法:0--正,1-负
二、数的表达方式 可以用1字节、2字节、4字节或8字节表示一个数。以下用1字节的情况 为例。 1、无符号数 无符号数只有值,没有符号,1字节无符号数表达的数的范围: 0000,0000~1111,1111,即0~255。 2、有符号数 如何表示符号?如何表达值? 以1字节表示有符号数,最高位bit7表示符号, bit6~ bit0表示值。 以2字节表示有符号数,最高位bit15表示符号,bit14~bit0表示值。 符号的表示方法:0---正, 1---负
值的表示方法:原码、反码、补码。一般用补码。 (1)原码。原码表示的值是数的绝对值。例、 +7的原码:00000111 7的原码:10000111 (2)反码。 正数的反码和其原码相同。 负数的反码是:符号位为1,数值位是对该数的原码的相应位取反。 如 7的反码:00000111 -7的反码:11111000 +0的反码:00000000 -0的反码:11111111
值的表示方法:原码、反码、补码。一般用补码。 (1)原码。原码表示的值是数的绝对值。例、 +7的原码:00000111 -7的原码: 10000111 (2)反码。 正数的反码和其原码相同。 负数的反码是:符号位为1,数值位是对该数的原码的相应位取反。 如: +7的反码:00000111 -7的反码:11111000 +0的反码:00000000 -0的反码:11111111
(3)补码。 原码和补码都不便于计算机的运算,因为在运算中要单独处理其符 号。要将符号位与其它位一样处理就用补码表示数据。 A、“模”的概念 “模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一 个计量机器,它也有一个计量范围,即都存在一个“模”。例 时钟的计量范围是0~11,模=12。 表示n位的计算机计量范围是0~2″-1,模=2″。 模实质上是计量器产生“益出”的量,它的值在计量器上表示不出 来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为 加法运算
(3)补码。 原码和补码都不便于计算机的运算,因为在运算中要单独处理其符 号。要将符号位与其它位一样处理就用补码表示数据。 A、“模”的概念 “模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一 个计量机器,它也有一个计量范围,即都存在一个“模”。例: 时钟的计量范围是0~11,模=12。 表示n位的计算机计量范围是0~ -1,模= 。 模实质上是计量器产生“益出”的量,它的值在计量器上表示不出 来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为 加法运算
例:设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法: 一种是倒拨4小时,即:10-4=6 另一种是顺拨8小时:10+8=12+6=6 在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以 用加8来代替。 对模而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和 3,7和5,6和6都有这个质。共同的特点是两者相加等于模。 , 对于计算机,其概念和方法完全一样。n位计算机,设η=8,所能表示的最 大数是1111111,若再加1称为10000000(9位),但因只有8位,最高 位1自然丢失。又回了000000所以8位二进制系统的模为28。在这 样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就 可以了。 把补数用到计算机对数的处理上,就是补码
例:设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法: 一种是倒拨4小时,即:10-4=6 另一种是顺拨8小时:10+8=12+6=6 在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以 用加8来代替。 对模而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和 3,7和5,6和6都有这个质。共同的特点是两者相加等于模。 对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最 大数是11111111,若再加1称为100000000(9位),但因只有8位,最高 位1自然丢失。又回了00000000,所以8位二进制系统的模为 。 在这 样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就 可以了。 把补数用到计算机对数的处理上,就是补码
B、补码的定义 对于n位计算机,某数x的补码是: 正数的补码:与原码相同, 负数的补码:符号位为1,数值位是对该数的原码的相应位取反, 然后整个数再加1。 例如:+7的补码:00000111 -7的补码:写出原码10000111 数值位取反11111000 加1 11111001 即-7的补码是11111001 计算机是以补码形式存放数的
B、补码的定义 对于n位计算机,某数x的补码是: 正数的补码:与原码相同, 负数的补码:符号位为1,数值位是对该数的原码的相应位取反, 然后整个数再加1。 例如:+7的补码:00000111 -7的补码:写出原码 10000111 数值位取反 11111000 加1 11111001 即-7的补码是11111001 计算机是以补码形式存放数的
3、实数 实数有符号、整数部分、小数部分和小数点。在十进制中,实数的一般表 达方式是: N=±S·10t 0<s<10 在二进制中,实数可以表达为 N=±S·2 ±J 称为阶码(整数),2为阶码的底,O<S<2。 32位实数的表达方式为: s)指数N2):8位尾数M(BT2BI0)23位 表示的实数值R=士1.M×2012 整数部分1是固定的,未在编码中表示出来 指数部分减去一个值,是为了避免出现负值
3、实数 实数有符号、整数部分、小数部分和小数点。在十进制中,实数的一般表 达方式是: 0<s<10 在二进制中,实数可以表达为: J称为阶码(整数),2为阶码的底,0<S<2。 32位实数的表达方式为: