C++编程思想 第1卷 第3章 运算符及其使用 移位运算符

移位运算符是对位的操纵。
左移运算符引起运算符左边的操作数向左移动 移动位数由运算符后面的操作数指定
右移运算符就向右移动,位数由运算符后面的操作数指定

移位运算符可以和等号结合 <<= >>= 左值到右值移位后的结果代替


//: C03:printBinary.h
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Display a byte in binary
void printBinary(const unsigned char val);
///:~


//: C03:printBinary.cpp {O}
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include <iostream>
void printBinary(const unsigned char val) {
  for(int i = 7; i >= 0; i--)
    if(val & (1 << i))
      std::cout << "1";
    else
      std::cout << "0";
} ///:~

//: C03:Bitwise.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
//{L} printBinary
// Demonstration of bit manipulation
#include "printBinary.h"
#include <iostream>
using namespace std;

// A macro to save typing:
#define PR(STR, EXPR) \
  cout << STR; printBinary(EXPR); cout << endl;  

int main() {
  unsigned int getval;
  unsigned char a, b;
  cout << "Enter a number between 0 and 255: ";
  cin >> getval; a = getval;
  PR("a in binary: ", a);
  cout << "Enter a number between 0 and 255: ";
  cin >> getval; b = getval;
  PR("b in binary: ", b);
  PR("a | b = ", a | b);
  PR("a & b = ", a & b);
  PR("a ^ b = ", a ^ b);
  PR("~a = ", ~a);
  PR("~b = ", ~b);
  // An interesting bit pattern:
  unsigned char c = 0x5A; 
  PR("c in binary: ", c);
  a |= c;
  PR("a |= c; a = ", a);
  b &= c;
  PR("b &= c; b = ", b);
  b ^= a;
  PR("b ^= a; b = ", b);
  fflush(stdin);
  getchar();
} ///:~


用预处理宏节省输入。
打印字符串,一个表达式的二进制表示形式,再后是换行
进行字节工作不希望带符号数
<< >> 实现位的移位功能,但是当移位越出数的一端时,那些位就会丢失
位掉进了神秘的位桶中
操作位的时候,也可以进行执行旋转,即在一端移掉的位插入另一端,好像它们在绕着
一个回路旋转。
在C/C++中,不支持直接旋转


输出
Enter a number between 0 and 255: 25
a in binary: 00011001
Enter a number between 0 and 255: 36
b in binary: 00100100
a | b = 00111101
a & b = 00000000
a ^ b = 00111101
~a = 11100110
~b = 11011011
c in binary: 01011010
a |= c; a = 01011011
b &= c; b = 00000000
b ^= a; b = 01011011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值