位运算符——原码-反码-补码(重点 难点)【二进制在运算中的说明】

如果连二进制的知识还没搞懂, 那么计算机最基础的你都还没明白, 所以2进制对我们程序员来说, 是必会, 必学的知识

二进制在运算中的说明:

一.  二进制是逢2进位的进位制, 0,1是基本算符

二.  现代的电子计算机技术全部采用的是二进制, 因为它只使用0, 1两个数字符号,非常简单方便, 易于用电子方式实现。计算机内部处理的信息, 都是采用二进制数来表示的, 二进制 (Binary) 数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1", 数字1在不同的位上代表不同的值, 按从右至左的次序, 这个值以二倍递增.

  1. 1. 请看下面代码, 回答a, b, c, d, e结果是多少?

        int a = 1>>2; //向右位移2位int b = -1>>2;int c = 1<<2;int d = -1<<2;int e = 3>>>2;//算术右移
//        a,b,c,d,e结果是多少?System.out.println("a ="+a);System.out.println("b ="+b);System.out.println("c ="+c);System.out.println("d ="+d);System.out.println("e ="+e);
  • 请回答在java中, 下面的表达式运算结果是: (位操作), 练习题

~2=? //按位取反

2&3=? // 2按位与3

2|3=? //

~-5=?

13&7=?

5|4=?

-3^3=? //按位异或

原码-反码-补码(重点 难点)

这些是计算机底层运行的最重要的机制, 很多程序员他们舍本逐末, 天天都在学框架, 然后学所谓的底层, 连最基本的都没搞懂, 你说他能行嘛

网上对原码, 反码, 补码的解释过于复杂, 我这里精简几句话:(背下来), 这里背下来不是我规定的也不是老师规定的, 是计算机的设计者冯诺伊曼早就规定好的, 我们必须背下来

对于有符号的而言:

  1. 1.

    二进制的最高位是符号位: 0 表示正数, 1 表示负数 (口诀: 0->0 1-> -)

    符号位就是代表正或负 0正数, 1负数

  2. 2.

    正数的原码, 反码, 补码都一样 (三码合一)

  3. 3.

    负数的反码 = 它的原码符号位不变, 其它位取反 (0->1,1->0)

    什么是其它取反就是 0变1, 1变0

  4. 4.

    负数的补码 = 它的反码 +1, 负数的反码 = 负数的补码 - 1

  5. 5.

    0 的反码, 补码都是 0

  6. 6.

    java没有无符号数, 换言之, java中的数都是有符号的

  7. 7.

    在计算机位运算的时候, 都是以补码的方式来运算的.

    他为什么要以补码的方式来运算呢? : 因为补码它可以解决正数和负数, 它把正数和负数用补码统一起来了, 所以设计者设计这种原码反码补码的规则特别的科学

  8. 8.

    当我们看运算结果的时候, 要看它的原码 (重点)

以上这些是一定一定要背下来的!!! 你如果背不住怎么办呢? 那你就多背几遍, 这个是一定要背下来的, 这个背不下来,我告诉大家你当程序员说实话很失败的.

按位运算符

  • java中有7个位运算符(&, |, ^, ~, >>, <<和>>>)

分别是 按位与&, 按位或, 按位异或^, 按位取反~, 它们的运算规则是:

按位与 & : 

                两位全为1, 结果为1, 否则为0

举例:

                比如我两个二进制 10010001 , 11110010 = 10010000

按位或 | :

                两位有一个为1, 结果为1, 否则为0

按位异或 ^ :

                两位一个为0, 一个为1, 结果为1, 否则为0

按位取反 ~ :

                0 -> 1 , 1 -> 0

比如: 2&3=? -2=? ~~2=? 2|3=? 2^3=?

//        位运算
//        1.先得到 2的补码 => 2的原码  首先2是int(4个字节) 一个字节为8位数 00000000 00000000 00000000 00000010
//          2的补码 00000000 00000000 00000000 00000010
//        2.3的补码 3的原码 00000000 00000000 00000000 00000011
//          3的补码 00000000 00000000 00000000 00000011
//        3.按位&
//          00000000 00000000 00000000 00000010
//          00000000 00000000 00000000 00000011
//          00000000 00000000 00000000 00000010 & 运算后的补码
//          运算后的原码 也是 00000000 00000000 00000000 00000010
//          结果就是 2System.out.println(2&3); //2//        推导
//        1. 先得到 -2 的原码 10000000 00000000 00000000 00000010
//        2. -2的反码  1111111 11111111 11111111 11111101
//        3. -2的补码  1111111 11111111 11111111 11111110
//        4. ~-2操作 00000000 00000000 00000000 00000001 运算后的补码
//        5. 运算后的原码 就是  00000000 00000000 00000000 00000001 => 1System.out.println(~-2); //1//        推导
//        1. 得到2的补码 00000000 00000000 00000000 00000010
//        2. ~2操作 按位取反 11111111 11111111 11111111 11111101 运算后的补码
//        3. 运算后的反码 11111111 11111111 11111111 11111100
//        3. 运算后的原码 10000000 00000000 00000000 00000011 => -3System.out.println(~2); //-3

移位操作符

  • 还有三个运算符 >> , << 和 >>>, 运算规则:

  1. 1.

    算数右移 >>:  低位溢出, 符号位不变, 并用符号位补溢出的高位

  2. 2.

    算数左移 <<: 符号位不变,低位补0

  3. 3.

    >>>: 逻辑右移也叫无符号右移, 运算规则是: 低位溢出, 高位补0

  4. 4.

    特别说明: 没有 <<< 符号

  • 应用案例 BitOperator

        int a = 1 >> 2; //1 => 000000001 本质 1 / 2 / 2 =0int c = 1 << 2; //1 => 00000001 => 00000100 本质 1 * 2 * 2 = 4int d = 4 << 3; //4 => 本质 4 * 2 * 2 * 2 = 24int e = 15 >> 2; // 本质  15 / 2 / 2 = 3System.out.println(a); //0System.out.println(c); //4System.out.println(d); //24System.out.println(e); //3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx添加访问密码

安装密码生成工具 yum -y install httpd-tools生成用户和密码文件 [rootlocalhost nginx]# htpasswd -c /usr/local/nginx/password web01 New password: 这里输入密码 Re-type new password: 再次输入密码 Adding password for user web01参数说明&#xff1a; web01 是自定…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及液态空气储能与综合需求响应的综合能源系统低碳经济调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

HTML静态网页成品作业(HTML+CSS)——游戏阴阳师介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

Android ANR简介

ANR&#xff08;App not respond&#xff09;是Android定义的一种稳定性问题类型&#xff1b;系统发出关键消息&#xff0c;同时发出此消息的超时消息。处理逻辑有两种情况&#xff1a; 关键消息被执行&#xff0c;超时消息被清除&#xff1b;ANR不会发生超时消息被执行&#x…

JAVASE2

封装的步骤&#xff1a; 1、所有属性私有化&#xff0c;使用private关键字进行修饰&#xff0c;private表示私有的&#xff0c;修饰的所有数据只能在本类中访问 2、对外提供简单入口&#xff1a;比如说被private修饰的成员变量&#xff0c;在其他类中只能通过getXxx/setXxx方法…

网络风暴:揭秘DDoS攻击的幕后黑手

在数字化时代的浪潮中&#xff0c;网络攻击已成为一种新型的战争手段。其中&#xff0c;分布式拒绝服务攻击&#xff08;DDoS&#xff09;以其强大的破坏力和隐蔽性&#xff0c;成为网络安全领域的一大挑战。DDoS攻击通过发动海量的恶意流量&#xff0c;如同狂风暴雨般席卷目标…

如何设置远程桌面连接?

远程桌面连接是一种方便快捷的远程访问工具&#xff0c;可以帮助用户在不同地区间快速组建局域网&#xff0c;解决复杂网络环境下的远程连接问题。本文将针对使用远程桌面连接的操作步骤进行详细介绍&#xff0c;以帮助大家快速上手。 步骤一&#xff1a;下载并安装远程桌面连接…

芯片丝印反查

芯片丝印反查网 - IC芯片丝印,IC芯片代码,IC芯片印字,IC芯片顶标,SMD code,marking code,top mark芯查查-电子信息产业数据引擎 ic/芯片丝印反查网-芯查查

各种情况下的线缆大小选择

开口线鼻子和导线对应大小 开口铜鼻子对应线径大小 变压器容量对应高压侧电流大小 开关电流线缆功率对照表 家庭/工业最常用电线铜线电流承载功率 电工常用名词对应符号 导线面积承载的安全载流量及允许负荷对照表 漏电保护器选择参考表 电动机功率换算电流 电机功…

Python正则模块re方法介绍

Python 的 re 模块提供了多种方法来处理正则表达式。以下是一些常用的方法及其功能介绍&#xff1a; 1. re.match() 在字符串的开始位置进行匹配。 import repattern r\d string "123abc456"match re.match(pattern, string) if match:print(f"匹配的字符…

代码随想录——最大二叉树(Leetcode654)

题目链接 递归 二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode rig…

.NET 轻量级、高效任务调度器:ScheduleTask

前言 至于任务调度这个基础功能&#xff0c;重要性不言而喻&#xff0c;大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz&#xff0c;Hangfire&#xff0c;Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简易的任务调度,如果只是到分钟级别的粒…

全能集成开发平台Team·IDE

三甲医院的床位太难等了。反正也是小手术&#xff0c;老苏周五在附近找了家二甲医院&#xff0c;幸运的是&#xff0c;门诊迅速为我开具了入院证。周六早晨就接受了手术&#xff0c;周日挂了一天水&#xff0c;周一下午就出院了。准备在家先休息两天。 2~4 周之后把支架取出来…

阿里云海外视频安全的DRM加密

随着科技的进步&#xff0c;视频以直播或录播的形式陆续开展海外市场&#xff0c;从而也衍生出内容安全的问题&#xff0c;阿里云在这方面提供了完善的内容安全保护机制&#xff0c;适用于不同的场景&#xff0c;如在视频安全提供DRM加 由图可以了解到阿里云保护直播安全的方法…

Java的 File类

Java的 File类 File类&#xff1a;相关方法&#xff1a;构造方法&#xff1a;创建文件/目录&#xff1a;重命名&#xff1a;判断&#xff1a;获取&#xff1a;删除&#xff1a; 路径&#xff1a;相关操作&#xff1a;操作1&#xff1a;目录存在&#xff1a;一层级的目录不存在:…

c++模板与泛型编程

模板的作用&#xff1a;通过使用模板降低重复代码的编写&#xff0c;把已经写好的代码作用最大化&#xff1b; 模板的概念 1.模板与泛型编程&#xff08;目的时只进行逻辑操作&#xff0c;不需要考虑数据类型&#xff0c;将类型作为参数传递&#xff09; 模板是实现代码重用…

【软件设计师】程序语言

1.程序设计语言基本概念 1.1 低级语言与高级语言 低级语言&#xff1a;机器语言和汇编语言称为低级语言 机器语言指0.&#xff0c;1组成的机器指令序列 汇编语言指用符号表示指令的语言&#xff0c;如MOV AX&#xff0c;2 高级语言&#xff1a;从人类的逻辑角度出发&#xff0…

numpy-mkl的下载地址

不要使用pip3直接在终端安装&#xff0c;因为pip3默安装的是numpy&#xff0c;而不是numpymkl。 采用在第三方库中手动下载后&#xff0c;再安装的方式。 第三方库网址&#xff1a;https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 如果不能进入就可以选择去git里面&#x…

(三)MobaXterm、VSCode、Pycharm ssh连接服务器并使用

背景&#xff1a;根据前两篇文章操作完成后&#xff0c; 手把手教学&#xff0c;一站式安装ubuntu及配置服务器-CSDN博客 手把手教学&#xff0c;一站式教你实现服务器&#xff08;Ubuntu&#xff09;Anaconda多用户共享-CSDN博客 课题组成员每人都有自己的帐号了&#xff0…

嵌入式0基础开始学习 Ⅲ Linux基础(3)正则表达式

0.问题引入 字符串是计算机应用中最为广泛的处理对象之一(浏览器&#xff0c;xml文件&#xff0c;代码) 并且字符串的组合规则形式各种各样&#xff0c;如&#xff1a; 数字字符串 email字符串 IP地址字符串 网址 …