第8章算 本章导读 本章是初学C语言者的一大难点。属较髙要求,适合于编写系统 据言程设计 软件的需要。读者应在掌握了讣算机的几种基本数值编码的基础 上,开始本章的学习。通过本章的学习我们将近一步体会到C语 言既具有髙级语言的特点,又具有低级语言的功能,它能直接对 计算机的硬件进行操作,因而它具有广泛的用途和很强的生命力。 中本章主要知识点 (1)位运算符的含义及使用 60 (2)位运算的特殊应用 (3)位复合赋值运算符的含义及使用 (4)位段的定义、位段变量的说明及引用 环 境 回本书目
本章导读 本章是初学C语言者的一大难点,属较高要求,适合于编写系统 软件的需要。读者应在掌握了计算机的几种基本数值编码的基础 上,开始本章的学习。通过本章的学习我们将近一步体会到C语 言既具有高级语言的特点,又具有低级语言的功能,它能直接对 计算机的硬件进行操作,因而它具有广泛的用途和很强的生命力。 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本书目录 第8章 位运算 本章主要知识点 (1) 位运算符的含义及使用 (2) 位运算的特殊应用 (3) 位复合赋值运算符的含义及使用 (4) 位段的定义、位段变量的说明及引用
第8章运算 8.1笕运算的C程序奥例 据言程设计 8.2二选制位运算 8.3位段 60 8.4缭合奧训 环 境 返回本章导读
第8章 位运算 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本章导读 8.1 位运算的C程序实例 8.2 二进制位运算 8.3 位段 8.4 综合实训
8.1t运犷的C程序实例 悟言程序设 (例8.1 从结果可以看出,在这个程序中出现的几种运算符显然不同于以 计前,它们不是两个十进制数值之间简单的运算,而是十进制数对 应的二进制“位”的运算 60 环 境
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本章目录 8.1 位运算的C程序实例 【例8.1】 从结果可以看出,在这个程序中出现的几种运算符显然不同于以 前,它们不是两个十进制数值之间简单的运算,而是十进制数对 应的二进制“位”的运算
例8.1】实例 门【例81】编写程序完成对两个整型量进行按位逻辑运算。 程序名为8_1cpp 语|# include" stdio. h 运行情况为: maino input the numbers:输入:9,5<CR 程 i int a, b 序 i% printf("input the e numbers 计 scanf(%d%"&a&kb) printf("odn"akb)殚输出按位与结果*/65526 printf("%\n"2b),/*输出按位或结果* printf( %od n", a'b/,输出按位异或结果 6 printf("auin-a)/输出a的按位取反结果* 程序演刁 环 境 区回本节目录
【例8.1】实例 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本节目录 程序演示 【例8.1】编写程序完成对两个整型量进行按位逻辑运算。 程序名为l8_1.cpp。 #include "stdio.h" main() { int a,b; printf("input the numbers: "); scanf("%d,%d",&a,&b); printf("%d\n",a&b); /*输出按位与结果*/ printf("%d\n",a|b); /*输出按位或结果*/ printf("%d\n",a^b); /*输出按位异或结果*/ printf("%u\n",~a); /*输出 a的按位取反结果*/ } 运行情况为: input the numbers: 输入:9,5 1 13 12 65526
例8.1程序渡示 八181-创天中文v++-[Lt8-1.c] 文件编查看 181 回区 凸回创厂画习幽酬血A阪 input the number [Globals) Press any key to continue 田81c!ass 弹出运行 结果窗口 Classview自 输入源程序 →编译人调试λ查找文件1入查找文件2入结果Ⅻ」 Read 返回例题 巡回本节日录
[例8.1]程序演示 输入源程序 弹出运行 结果窗口 返回例题 返回本节目录
82二选侧 所谓位运算是指进行二进制位的运算。在系统软件中,常要处理二 进制位的问题。C语言提供了按位运算的功能,这使得它与其它高级 语言相比,具有很强的优越性 序设计 8.2.1二进制位运 8.2.2笕复合赋值运犷符 60 环 境
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本章目录 8.2 二进制位运算 8.2.1 二进制位运算 8.2.2 位复合赋值运算符 所谓位运算是指进行二进制位的运算。在系统软件中,常要处理二 进制位的问题。C语言提供了按位运算的功能,这使得它与其它高级 语言相比,具有很强的优越性
8.2.1二进侧笕箕 「c语言提供了六种位运算符(见表81): 表8-1位逻辑运算与移位运算 类型 运算符 含义 程 序 按位与 位逻辑 按位或 按位异或 运算符 取反 白 移位运 << 左移 算符 右移 环 境 返回本节目
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 8.2.1 二进制位运算 类 型 运算符 含义 位逻辑 运算符 & 按位与 | 按位或 ^ 按位异或 ~ 取反 移位运 算 符 > 右移 C语言提供了六种位运算符(见表8-1): 表8-1位逻辑运算与移位运算 返回本节目录
8.2.1二进侧笕箕 说明: ①运算量只能是整型或字符型的数据,不能为实型或结构体等类型的数据。 ②六个位运算符的优先级由高到低依次为:取反、左移和右移、按位与、 按位异或、按位或 程 8两个不同长度的数据进行位运算时,系统会将二者按右端对齐。下面对 做|各种位运算符介绍如下: 1.“按与”运算符(&) 4.“求反”运算待() 2.“按位或”运算符() 5.“左移”运算待() 环 境 返回本节目录
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 8.2.1 二进制位运算 说明: ①运算量只能是整型或字符型的数据,不能为实型或结构体等类型的数据。 ②六个位运算符的优先级由高到低依次为:取反、左移和右移、按位与、 按位异或、按位或。 ③两个不同长度的数据进行位运算时,系统会将二者按右端对齐。下面对 各种位运算符介绍如下: 返回本节目录 1.“按位与”运算符(&) 2.“按位或”运算符(|) 3.“按位异或”运算符(^) 4.“求反”运算符(~) 5.“左移”运算符(>)
1.“按位与”运算(&) (1)规则: e参与运算的两数(以补码方式出现)各对应的二进位相与(即逻辑乘), 悟只有对应的两个二进位均为时,结果位才为1,否则为0,它是双目运算符。 富即:0&0=0:0&1=0:180=0:1&1=1。 程例如: 序 做|%5可写算式如下: 计9的二进制补码:00001001 5的二进制补码:00000101 白 00000001(1的二进制补码) 6可见9&5=1。 环 境 返回8.2.1目录
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 1.“按位与”运算符(&) (1)规则: 参与运算的两数(以补码方式出现)各对应的二进位相与(即逻辑乘), 只有对应的两个二进位均为1时,结果位才为1,否则为0,它是双目运算符。 即:0&0=0;0&1=0;1&0=0;1&1=1。 例如: 9&5可写算式如下: 9的二进制补码: 0 0 0 0 1 0 0 1 5的二进制补码: 0 0 0 0 0 1 0 1 & ___________________ 0 0 0 0 0 0 0 1(1的二进制补码) 可见9&5=1。 返回8.2.1目录
1.“按位与”运算(&) 2)特殊用途: ①清零 言|授位与运算通常用来对某些位清0。由按位与的规则可知:为了使某数的指 定位清零,可将该数按位与一特定数。该数中为1的位,特定数中相应位应 程|为:该数中为0的位,特定数中相应位可以为也可以为1。由此可见,能 序|对某一个数的指定位清零的数并不唯一。【例82 补/②取一个数中某些位 可将该数与一个特定数进行&运算,对于要取的那些位,特定数中相应的 3位设为1。例831 ③取出数中某一位 白 要相将一个数的某一位保留下来,可将该数与一个特定数进行&运算,特 6定数的相对应的那位应为1。【例84 环 境 返回本节目录
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 1.“按位与”运算符(&) (2)特殊用途: ①清零 按位与运算通常用来对某些位清0。由按位与的规则可知:为了使某数的指 定位清零,可将该数按位与一特定数。该数中为1的位,特定数中相应位应 为0;该数中为0的位,特定数中相应位可以为0也可以为1。由此可见,能 对某一个数的指定位清零的数并不唯一。【例8.2】 ②取一个数中某些位 可将该数与一个特定数进行&运算,对于要取的那些位,特定数中相应的 位设为1。【例8.3】 ③取出数中某一位 要相将一个数的某一位保留下来,可将该数与一个特定数进行&运算,特 定数的相对应的那位应为1。【例8.4】 返回本节目录