1:<< 左移操作符

2:>> 右移操作符 

(注:位移操作符的操作数只能是整数)

<< 左移操作符   与   >> 右移操作符  都是移二进制位操作符

整数的二进制表现形式有三种:原码,反码,补码。

举一个正数10二进制表示的列子:(int占四个字节,也就是32个比特位(1B==32b))

int a=10; (其中正数的原码,反码,补码是相同的。)

原码:按照一个数的正负,直接写出他的二进制形式,就是他的原码。

a的二进制原码:00000000000000000000000000001010

a的二进制反码00000000000000000000000000001010

a的二进制补码:00000000000000000000000000001010

int b=-10;  (其中负数的原码,反码,补码是要经过计算的,计算方法下滑在分割线内

b的二进制原码:1000000000000000000000000000 1010

b的二进制反码:11111111111111111111111111111111  0101

b的二进制补码:11111111111111111111111111111111  0110

我们会发现,a的第一位二进制是0,的b第一位二进制是1

其实二进制的第一位就是表示数的正负的,1表示负,0表示正,这一个二进制位被称为符号位,在负数的原码,反码中不会被改变。


负数原码,反码,补码的计算

原码:符号位为1,再直接写出他的二进制形式。

反码:符号位不变,其他位按位取反。

补码:反码+1。

通过补码计算原码:

1:原码=补码-1 再 符号位不变按位取反

2:原码=补码符号位不变按位取反 再 +1

负数算补码的重要性:计算机中存储的是补码。位移操作符 <<左移 与 >>右移 都是移动整数的补码。


正数:位移操作符 <<左移 与 >>右移 的基本逻辑:

int a=10; (其中正数的原码,反码,补码是相同的。)

a的二进制补码:00000000000000000000000000001010

a<<2:              :   00|00000000000000000000000000101000|   32+8==40  

前面去掉两位0,后面补齐两位0


a的二进制补码:    00000000000000000000000000001010

a>>1               :   | 00000000000000000000000000000101|0      4+1=5 

后面去掉1位,后面补齐一位0


负数:位移操作符 <<左移 与 >>右移 的基本逻辑:

int a=-10;  (其中负数的原码,反码,补码是要经过计算的,计算方法上滑在第一个分割线内

a的二进制原码:1000000000000000000000000000 1010

a的二进制反码:11111111111111111111111111111111  0101

a的二进制补码:11111111111111111111111111111111  0110


a的二进制补码:11111111111111111111111111111111  0110

a<<2:              :   11|111111111111111111111111111111 0110 00|   

计算成原码     :     10000000000000000000000000 100101    -(32+8)==-40

前面去掉两位0,后面补齐两位0


a的二进制补码:11111111111111111111111111111111  0110

a>>1:              :   | 111111111111111111111111111111111011|0

后面去掉1位,后面补齐一位1(因为去掉的一位的后面一位是1)

计算成原码     :    | 1000000000000000000000000000101|0     -(4+1)=-5

位移操作符 <<左移 与 >>右移 的基本逻辑相关推荐

  1. 关于程序中的操作符左移和右移问题

    程序中经常会看到<< 5或者>>等符号,这表示左移和右移操作.比如你一串数字是123456789, 那么你左移5位(<< 5)就会得到678900000,如果你右移 ...

  2. 操作符(一)(算数操作符,位移操作符,位操作符)

    目录: 1.算术操作符 2.位移操作符 (1) <<    左移操作符(高位丢掉,低位补0): eg:将1左移1位 (2) >> 右移操作符: eg1:将1右移一位 eg2:将 ...

  3. c++ 操作符大全-算术操作符、关系操作符、逻辑操作符、位操作符、自增自减操作符、赋值操作符、条件操作符、逗号操作符、操作符优先级

    文章目录 操作符 1.算术操作符 2.关系操作符 3.逻辑操作符 4.位操作符 5.自增自减操作符 6.赋值操作符 7.条件操作符 8.逗号操作符 9.操作符优先级 操作符 计算机程序可以看作一串运算 ...

  4. 初探C++标准库:移位左移、右移操作符的重载,C++标准库

    C++标准库 移位左移.右移操作符的重载 C++标准库 移位左移.右移操作符的重载 怎么把变量/常量通过移位操作符,移到一个类的对象中去呢? #include <stdio.h>const ...

  5. C语言操作符—左移右移操作符

    文章目录 1.移位操作符 十进制转二进制 1.2 << 左移操作符 1.2.1 >> 左移操作符 -- 正数 1.2.2 >> 左移操作符 -- 负数 1.3 &g ...

  6. Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位

    Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位 一.概述 1.在浏览一篇文章时,看到一个介绍 ,使用位移操作替代乘除法 ,若位移多位该怎么计算呢?  二.代码理解 ...

  7. 8.C语言——位操作符与位移操作符

    本文采用了<C Primer Plus>.<C陷阱与缺陷>以及比特科技的教学视频. 对C语言位操作符与位移操作符进行了详细讲解,为了加深印象,每一个知识点均有例题和实用讲解 目 ...

  8. php中左移和右移,c语言左移和右移的示例详解

    逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题. 算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变. 算术移位指令 算术移位 ...

  9. 计算机原理与基础 —— C语言中的左移与右移

    1.双目运算符 位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算. 位移位运算符分为左移和右移两种,均为双目运算符. 例如: 8  >>  3   (意思是8向右移动3 ...

最新文章

  1. LeetCode Add Binary
  2. C# 各版本更新简介
  3. python控制结构实训_Python 控制结构
  4. 大道至简(第六章)读后感
  5. 高效的动态URL限流实现
  6. .NET 6新特性试用 | 总结:我最喜欢的5个特性
  7. Python中的虚拟环境-virtualenv
  8. ajax传递json对象 php,ajax 和 php 相互传递 JSON对象(转载)
  9. 计算机电缆检测报告,天联牌计算机电缆详细介绍
  10. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.17
  11. zookeeper使用问题汇总
  12. 用花生壳搭建个人简易静态网站
  13. windows 搭建kms服务器激活_搭建kms服务器,自建KMS激活服务器的两种方法
  14. 利用Power BI制作分级地图报表
  15. JZOJ2499 东风谷早苗
  16. 企业使用it人力外包可以解决哪些问题
  17. C语言求x的y次方,fun函数实现x的y次方的计算,main函数中调用fun函数
  18. 三星Z Fold2 5G评测:折叠屏手机的最强形态
  19. Jweb-Servlet 知识点+代码实操
  20. html5如何快速选择工具使用技巧,PS新手抠图必掌握!超有用的快速选择工具

热门文章

  1. 一、Docker—简介及安装
  2. 关于easyExcel中读取Excel表头的说明
  3. 大数据用户分析,商圈业态分析,选址策略
  4. IMPDP/EXPDP + network_link的使用
  5. RabbitMQ集群
  6. 机器视觉丨环形光源原理及打光案例
  7. Why use iterators?
  8. ADB使用总结(一):模拟用户手势实现自动化测试【单线程版】
  9. 2022最新微信小程序授权登录(前后端分离)
  10. git 命令删除分支