第十二章位运算 ●基本知识 ●位运算符 ●位运算举例 ●位段
第十二章 位运算 ⚫ 基本知识 ⚫ 位运算符 ⚫ 位运算举例 ⚫ 位段
基本知识 ●对二进制位进行的运算叫位运算 ●字节和位 ●表示数的三种方法 原码 补码 反码
基本知识 ⚫ 对二进制位进行的运算叫位运算 ⚫ 字节和位 ⚫ 表示数的三种方法 – 原码 – 补码 – 反码
位运算符 ●C语言提供六种位运算符 &按位与 取反 按位或≤>右移 ●运算量只能是整形或字符型数据 ●~为单目运算符,其余均未双目运算符
位运算符 ⚫ C语言提供六种位运算符 & 按位与 ~ 取反 | 按位或 > 右移 ⚫ 运算量只能是整形或字符型数据 ⚫ ~为单目运算符,其余均未双目运算符
按位与运算符(&) ●运算规则:参加运算的两个数据中, 如果相应的两位都为1则结果为1, 否则为0 用途 存储单元清零 取一个数中的某些指定位 保留某些位
按位与运算符(&) ⚫ 运算规则:参加运算的两个数据中, 如果相应的两位都为1 则结果为 1, 否则为0 ⚫ 用途 • 存储单元清零 • 取一个数中的某些指定位 • 保留某些位
按位或运算符() ●运算规则:参加运算的两个数据中,只 要有一个为1则结果为1 用途 将某些位置1
按位或运算符(|) ⚫ 运算规则:参加运算的两个数据中,只 要有一个为1 则结果为 1 ⚫ 用途 • 将某些位置1
异或运算符(^) ●运算规则:参加运算的两个数据中,如果 相应的两位不同则结果为1,相同则为0 ●用途 使特定的位翻转(与1相异或) 与0相异或,保留原值 交换两个值,不用临时变量
异或运算符(^) ⚫ 运算规则:参加运算的两个数据中,如果 相应的两位不同则结果为1,相同则为0 ⚫ 用途 • 使特定的位翻转(与1相异或) • 与0相异或,保留原值 • 交换两个值,不用临时变量
取反运算符() ●运算规则:对一个二进制位按位取反 (单目运算符) 用途
取反运算符(~) ⚫ 运算规则:对一个二进制位按位取反 (单目运算符) ⚫ 用途
左移运算符(<<) ●运算规则:高位左移后溢出,舍弃,右 补0 ●用途 将一个数左移1位,相当于将该数乘以2
左移运算符(<<) ⚫ 运算规则:高位左移后溢出,舍弃,右 补0 ⚫ 用途 • 将一个数左移1位,相当于将该数乘以2
右移运算符(>) 运算规则:低位右移后舍弃,对高位 的处理分几种情况 ·对无符号数,高位补0 对有符号数,若符号位为0则补0,若符 号位为1,有两种情况 1.补0(逻辑右移) 2.补1(算术右移)√ 用途 将一个数右移一位,相当于将该数除以2
右移运算符(>>) ⚫ 运算规则:低位右移后舍弃,对高位 的处理分几种情况 • 对无符号数,高位补0 • 对有符号数,若符号位为0则补0,若符 号位为1,有两种情况 1. 补0(逻辑右移) 2. 补1(算术右移) ⚫ 用途 • 将一个数右移一位,相当于将该数除以2
位运算赋值运算符 ●位运算和赋值运算符组成的复合运算符 <<
位运算赋值运算符 ⚫ 位运算和赋值运算符组成的复合运算符 &= |= ^= >=