美文网首页C/C++学习笔录
简单介绍一下位运算符

简单介绍一下位运算符

作者: Allen_HD | 来源:发表于2019-04-19 17:54 被阅读0次

<font size = 4>首先强调一下 <font color=red>二进制数在内存中以补码的形式存在</font>(可能我自己的知识点匮乏)</font>

二进制就不简单说了,先介绍一下原码、反码、补码的知识点
<font color = gray size =3>
对于有符号数而言

  • 二进制的最高位是符号为:0为正,1为负
  • <font color = red>正数的原码、反码、补码都是一样的。</font>
  • 负数的反码 = 原码符号位不变,其他位取反(0变1,1变0)
  • 负数的补码 = 反码 + 1;
  • <font color = red>负数的原码 = 反码取反</font>
  • <font color = red>负数的原码 = 补码取反 + 1</font>
  • 0的反码、补码都为0
  • <font color = red>在计算机运行的时候,都是以补码的方式来运行的</font>
    </font>
    // 由于计算机数字是32位,这里举例暂用8位

下面来介绍一下位取反 (~)

// 我们对 11进行取反 (~11)
// 11 在计算机中储存是它的补码(正数原码、补码都一样)
// 0000 1011   (11的原码)
// 0000 1011   (11的补码)
// 1111 0100   (按位取反)  (这里得到的是内存中储存的二进制,即 原数的补码)
// 接下来将补码转变成原码(符号位不变,减一取反)
// 1000 1100   ( == -12)   

有个小规律:<font color = greed>位运算符(~)—— 数字求负数,然后减一 (-number -1)</font>

位运算符 与 (&)

/*
每一位与的规律:
0  0   0
0  1   0
1  0   0
1  1   1   
*/
// 来试试  25 & 3
// 0001 1001    // 25的补码  由于正数,原、补、反码都一样
// 0000 0011    // 3的补码
// 0000 0001    // 25 & 3 =  1

// 看看负数 -25 & -3
// 1001 1001    // -25的原码
// 1000 0011    // -3的原码
// 1110 0111    // -25的补码
// 1111 1101    // -3的补码
// 1110 0101    // -25 & -3的补码
// 1001 1011    // -25 & -3的原码 = -27         

位运算符 或 (|)

/*
每一位与的规律:
0  0   0
0  1   1
1  0   1
1  1   1   
*/
// 来试试  25 | 3
// 0001 1001    // 25的补码  由于正数,原、补、反码都一样
// 0000 0011    // 3的补码
// 0001 1011    // 25 | 3 =  27

// 看看负数 -25 | -3
// 1001 1001    // -25的原码
// 1000 0011    // -3的原码
// 1110 0111    // -25的补码
// 1111 1101    // -3的补码
// 1111 1111    // -25 | -3的补码
// 1000 0001    // -25 | -3的原码 = -1        

位运算符 异或 (^)

/*
每一位与的规律:
0  0   0
0  1   1
1  0   1
1  1   0   
*/
// 来试试  25 ^ 3
// 0001 1001    // 25的补码  由于正数,原、补、反码都一样
// 0000 0011    // 3的补码
// 0001 1010    // 25 ^ 3 =  26

// 看看负数 -25 ^ -3
// 1001 1001    // -25的原码
// 1000 0011    // -3的原码
// 1110 0111    // -25的补码
// 1111 1101    // -3的补码
// 0001 1010    // -25 ^ -3的补码 (正数 也是 -25 ^ 3 的原码)      

位运算符 左移 (<<)
// 整体向往左移动,用<font color = red>0</font>补齐,符号位不变

// 来试试  25 << 2
// 0001 1001    // 25
// 0110 0100    // 25 << 2  == 100

// 来试试  -25 << 2
// 1001 1001    // -25
// 1110 0100    // -25 << 2  == -100

位运算符 右移 (>>)
// 整体向往右移动,用 <font color = red>符号位</font> 补齐,符号位不变

// 来试试  25 >> 2
// 0001 1001    // 25
// 0000 0110   // 25 >> 2  == 6  //符号位为0 补齐

// 来试试  -25 >> 2
// 1001 1001    // -25
// 1110 0111    // -25的补码
// 1111 1001  // -25 >> 2的补码
// 1000 0111  //-25 >> 2 的原码 == -7

相关文章

  • 简单介绍一下位运算符

    首先强调一下 二进制数在内存中以补码的形式存在 (可能我自己的知识点匮乏) 二进制就不简单说了,先介绍一下原码、...

  • 不动点运算

    本章会介绍更多的算术运算符word,还会引入其他类型的数字 1 快捷操作运算符 从简单的运算开始,下面的运算符wo...

  • 06-JavaScript基础-赋值运算和自增自减

    赋值运算符 简单赋值运算符: = 复合赋值运算符: +=、-=、*=、/=、%= 简单赋值运算符格式: 变量 = ...

  • JavaScript基础--赋值运算和自增自减

    赋值运算符 简单赋值运算符: = 复合赋值运算符: +=、-=、*=、/=、%= 简单赋值运算符格式: 变量 = ...

  • 06-JavaScript基础-赋值运算和自增自减

    赋值运算符简单赋值运算符: =复合赋值运算符: +=、-=、*=、/=、%=简单赋值运算符格式: 变量 = 数据;...

  • leetcode371. 两整数之和

    题目说不能使用运算符 + 和 -,那么我们就要使用其他方式来替代这两个运算符的功能。位运算中的加法我们先来观察下位...

  • java中int与byte、long与byte之间的互相转换

    因为转换会用到运算符和补码的知识,下面先对运算符的使用做个简单的介绍。 与(&)、非(~)、或(|)、异或(^)简...

  • Python | 运算符及表达式

    介绍Python中的七大与运算符,成员运算符和身份运算符,介绍各种运算符的规则和标准。 什么是运算符? 在我们日常...

  • 尚硅谷JavaSE基础

    2.6 运算符2.6.1 常见运算符算术运算符关系运算符逻辑运算符赋值运算符三目运算符 2.6.2运算符详细介绍1...

  • Java中的常见运算符以及使用

    Java中的运算符有算术运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、三目运算符等。下面介绍一下这...

网友评论

    本文标题:简单介绍一下位运算符

    本文链接:https://www.haomeiwen.com/subject/bbucgqtx.html