C++primer 5.3 位操作符(~、^、&、|)(未完)

简介

  • 使用unsigned 整型操作数

    • 无符号的好处就是所有的位都是数字位,没有符号位。 unsigned char bits = 0227 ,0227表示的是八进制的数,二进制的三位对应八进制的一位
  • 在使用位操作符之前都先将整型数转换为二进制数

    • 类似于bitset 标准库类型(3.5节),转换成里面的数值只有0和1 ,0227要表式成二进制数

==================================================================================

一、位操作符

1、位操作符介绍

  • 位操作符使用整型的操作数。

  • 位操作符将其整型操作数视为二进制位的集合,为每一位提供检验和设置的功能(3.5 节 bitset 类型的对象也可以使用类操作符)

  • 到底有哪些位操作符呢?

    • ~ : 位求反 :功能类似于bitset 的flip 操作:将操作数的每一个二进制位取反:1变0,0变1
    • << : 左移 : 操作符提供移位操作,其右操作数标志要移动的位数。
    • >> : 右移
    • & : 位与 : 如果两个操作数对应的位都为1 ,结果为 1 ,否则为0。
    • ^ : 位异或 : 在每个位的位置,如果两个操作数对应的位只有一个(不是两个)1,结果 该位为1,否则为0;
    • | : 位或 : 在每个位的位置,操作数只要有1 ,结果就为1 ,否则为0 .
  • 系统不能确保如何处理其操作数的符号位,所以建议使用unsigned 整型操作数
// - 例子,假设unsigned char 类型有8位。
int mian(){
unsigned char bits= 0227;
bits = ~ bits;
return 0;}

C++primer 5.3 位操作符(~、^、&、|)(未完)_第1张图片

//所以,0227 表示为 010010111,这样一来取反就很好算了。101101000  变成八进制就是 0550
unsigned char b1 = 0145;
unsigned char b2 = 0257;
unsigned char result=b1 & b2;

C++primer 5.3 位操作符(~、^、&、|)(未完)_第2张图片

2、bitset 对象或整型值的使用

//使用bitset 标准库来存放一次测验的成绩,成绩分及格和不及格,用1和0表示
bitset<30> bitset_quiz1;//使用3.5 节 bitset 标准库类型,默认为0,就是都不及格
bitset_quiz1.set(27); //修改27 号学生的位,set函数功能是置为1,将27位置为1

//使用整型值上的低级位操作来存放一次测验的成绩,成绩分及格和不及格,用1和0表示
unsigned long int_quiz1=0;//使用unsigned long 类型数来实现,初始值为0,unsigned long 类型的数据在机器上都至少拥有32位的长度。
int_quiz1 |= 。。。。。。。

//略。。
//bitset 标准库类型比 整型值上的低级位操作简单、方便

3、将移位操作符用于IO

例子

//《程序员面试宝典 p39》
int main()
{

int f(int x,int y)
{
return (x&y)+((x^y)>>1)
}
return 0;}

你可能感兴趣的:(运算符,C++笔试常考点)