精品课程第八章.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 位运算 位运算概念 位运算符 位段 8.1 位运算概念 C语言的位运算是指在C语言中能进行二进制位的运算。 位运算包括位逻辑运算和移位运算: 位逻辑运算能够方便地设置或屏蔽内存中某个字节的一位或几位,也可以对两个数按位相加等; 移位运算可以对内存中某个二进制数左移或右移几位等。 8.2 位运算符 C语言提供了六种位运算,如下表所示: 8.2.1 位逻辑运算符 1.“按位与”运算符 运算规则: 0 0 =0 0 1 =0 1 0 =0 1 1 =1 2.“按位或”运算符| 运算规则:0 | 0 =0 0 | 1 =1 1 | 0 =1 1 | 1 =1 3.“按位异或”运算符^ 运算规则: 0 ^ 0 =0 0 ^ 1 =1 1 ^ 0 =1 1 ^ 1 =0 4.“按位取反”运算符~ 运算规则: ~ 0=1 ~ 1=0 “按位与”运算规则:可以判断一个数据的某一位是否为1;可以保留一个数据中的某些位,屏蔽掉其它位 。 8.2.2 移位运算符 1.左移运算符: 运算规则:对运算符左边的运算量的每一位全部左移右边运算量表示的位数,右边空出的位补0。 如:a 4 说明: 左移1位相当于该数乘以2,左移n位相当于该数乘以2n(适合于未发生溢出的情况,即移出的高位中不含有1的情况) 2. 右移运算符: 运算规则:对运算符左边的运算量的每一位全部右移右边运算量表示的位数,右边低位被移出去舍弃掉,空出的高位补0还是补1,分两种情况: 第一: 对无符号数进行右移时,空出的高位补0。这种右移称为逻辑右移。 第二: 对带符号数进行右移时,空出的高位全部以符号位填补。即正数补0,负数补1。这种右移称为算术右移。 8.2.3 位赋值运算符 位赋值运算符是位运算符与赋值运算符的结合。 8.2.4 不同长度的数据进行位运算 如果两个数据长度不同进行位运算时(如ab,而a为long型,b为int型),系统会将二者按右端对齐。 如果b为正数,则左侧应该补满0; 如果b为负数,则左端应该补满1; 如果b为无符号整数,则左侧补满0。 8.3 位 段 位段结构是指结构体成员可以是以位为单位定义 存储长度的结构体。 位段结构的定义形式如下: struct 结构类型名 { 类型 成员1: 长度; 类型 成员2: 长度; …… }; 【例1】 struct device : { unsigned a:1; unsigned b:2; unsigned c:4; int x; float y; } data; 位段的长度不能超越整型边界。 位段不能定义位段数组 本章小结 C语言的位运算是指在C语言中能进行二进制位的运算。 * * b2 右移 a1 左移 ~a 按位取反 ~ a^b 按位异或 ^ a|b 按位或 | ab 按位与 举 例 含 义 位 运 算 符 “按位或”运算可以使一个数据的某些位置为1,其位不变。 “按位异或”运算可以使一个数据的某些位翻转,即1变为0,0变为1。 “按位异或”运算可以实现不用临时变量来交换两个变量的值。 a=a^b; b=b^a; a=a^b; ? 说明:位逻辑运算符的一些用途 a=ab a =b 右移赋值 = a=ab a=b 左移赋值 = a=a^b a^=b 位异或赋值 ^= a=a|b a|=b 位或赋值 |= a=ab a=b 位与赋值 = 等 同 于 例 子 含 义 位赋值运算符 其中: 冒号“:”左面的成员称为位段,冒号右面的长度表示存储位段需要占用字节的位数。 y x a b c 1 4 2 1 16 32 说明: 位段在一个存储单元中的分配因

文档评论(0)

iris + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档