首页 > 编程语言 >C++ 位运算

C++ 位运算

时间:2023-02-07 12:04:21浏览次数:39  
标签:右移 操作数 运算 29 C++ 按位 赋值


位运算基本符号:

&  按位与         &= 按位与赋值

|  按位或              |=  按位或赋值

^  按位异或     ^=  按位异或赋值

<<  左移        <<=  左移赋值

>>  右移         >>=  右移赋值

~  按位取反


1.  按位与运算


左右操作数对应的每一位分别做逻辑与运算

     10            0 0 0 0 1 0 1 0

     29           0 0 0 1 1 1 0 1

10&29         0 0 0 0 1 0 0 0 

值8

2. 按位或运算

左右操作数对应的每一位分别做逻辑或运算

     10       0 0 0 0 1 0 1 0

     29      0 0 0 1 1 1 0 1

10|29      0 0 01 1 1 1 1

值为31

3. 按位异或运算
当左右操作数对应位不相同,位操作的结果才为1
 10             0 0 0 0 1 0 1 0
  29            0 0 0 1 1 1 0 1

 10^29      0 0 01 0 1 1 1

值为23

4. 左移

按右操作数指定位数,将左操作数按位向左移动,腾空数位补0

 10<<2  00001010<<2

 40        00101000

C++进行算术左移时,不会移动符号位 


对于一个整数,每左移一位就相当于乘以2


5. 右移

按右操作数指定位数,将左操作数按位向右移动

 12>>2  00001100>>2

 3          00000011

做算术右移时,不会移动符号位(左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;)


对于一个整数,每右移一位就相当于整除以2


6. 按位取反

单目运算。对操作数按位做逻辑非

 -11            11110101

负数在计算机中用补码表示。11110101是-11的补码

7. 位运算的复合赋值

位运算的5个复合赋值与其他复合赋值的操作形式一致

例如,若有

  int a, b ;

则  a&=b  等价于  a=a&b

  a|=b  等价于    a=a|b

  a^=b  等价于    a=a^b

  a<<=b  等价于  a=a<<b

  a>>=b  等价于  a=a>>b








              



标签:右移,操作数,运算,29,C++,按位,赋值
From: https://blog.51cto.com/u_14932227/6041849

相关文章

  • HelloWorld之Java调用C++(JNI)
    JNI(JavaNativeInterface),通过使用Java本地接口书写程序,可以确保代码在不同的平台上方便移植。JNI技术博客:https://blog.csdn.net/m0_37537867/article/details/12413......
  • JavaScript 使用 !! 运算符的利弊
    !!运算符是在JavaScript中将一个值转换为布尔值的常用方法。使用这个运算符的优点是:简单易用:它只需要一行代码就可以完成转换,而不需要使用其他的方法。可读性:它很......
  • map c++
    C++map用法总结(整理)1,map简介map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value......
  • C++ 引用:他是坤坤也是鸡哥
    一、前言作为一名ikun,我最喜欢的明星就是坤坤,但是坤坤又不只叫坤坤,因为他的成名之作《鸡你太美》,ikun们就经常亲切的叫他鸡哥。这个过程中,鸡哥就是我们ikun给偶像坤坤......
  • AcWing 791. 高精度加法C++数组实现
    高精度加法a,b均为正整数#include<iostream>usingnamespacestd;constintN=100010;intA[N],B[N],C[N];intAdd(inta[],intb[],intc[],intcnt){......
  • C++11之线程库
    在C++11之前,涉及到多线程问题,都是和平台相关的,比如Windows和Linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,并且可以......
  • 循环链表的创建、插入、删除、逆序、显示(C++实现)
    对于单链表,因为每一个结点仅仅存储了向后的指针。到了尾标志就停止了向后链的操作,这样,其中某一结点就无法找到它的前驱结点了。对于单链表的操作大家能够看我的这篇博客htt......
  • C++实现RVIZ 2D POSE ESTIMATE 功能设置机器人初始坐标
    关于rviz中小车初始点的设置问题一般有两种方法:1打开rviz在其上方工具栏中有2DPoseestimate,用来设置大概的初始点2一般在amcl.launch文件中也会定义初始点,大多设为00......
  • 【八大数据排序法】合并排序法的图形理解和案例实现 | C++
    第十九章合并排序法:::hljs-center目录第十九章合并排序法●前言●认识排序●一、合并排序法是什么?1.简要介绍2.具体情况3.算法分析●二、案例实现1.......
  • Effective C++ Item 11: 在operator=中处理自赋值问题
    定义赋值运算符函数需要注意的问题:返回值类型声明为引用,并在函数返回前返回*this。因为只有返回引用,才能允许连续赋值。传入参数应声明为常量引用,否则从形参到实参会多......