首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

1+1=2是如何运算的

计算机,计算两个字才是关键,那么作为JVM也需要去进行计算,最简单的计算莫过于加减乘除,下面看一下加减乘除的具体指令有哪些,文章的结尾我们也会给出1+1=2的运算过程。...,ddiv 求余指令:irem,lrem,frem,drem 取反指令:ineg,lneg,fneg,dneg 位移指令:ishl,ishr,iushr,lshl,lshr,lushr 按位或指令:ior...,lor 按位与指令:iand,land 按位异或指令:ixor,lxor 局部变量自增指令:iinc 比较指令:dcmpg,dcmpl,fcmpg,fcmpg,lcmpg 当进行除法和求余计算时,如果除数为...double -> int d2l:double -> long d2f:double -> float int或者long类型的窄化只需要将最高的几位丢弃,保留最低的N位(N为转换后的数据类型长度)即可...1+1=2 public class ClassTest { public int add(int a, int b) { return a + b; } } 我们看一反编译后的

99820

1-1 Java基础-位运算

1-1 Java基础-位运算 什么是位运算?...一个字节=8位二进制 1k=1024字节 1k=1024*8位二进制 位运算其实就是移位运算,将内存里面的二进制进行移位 比如二进制=101向右移1位 010|1 移位之后的1其实已经不被计算在内了..., 变成内存里面的垃圾 在java中,一个int数值类型有32位二进制 1位是符号位,从2的0次方开始算起,数值的范围为 [−232,231−1][-2^{32},2^{31}-1][−232,231...−1] Java的位运算 带符号位的位运算 位,比如101左移1位 101 1010 向后补0 >>右移就是向右移一位 101 0101 记住这是带符号位的移位 无符号位运算...−3-3−3变成了 230+21=21474836462^{30} + 2^{1}=2147483646230+21=2147483646 便于观察我们可以将-3无符号左移31位 1 0000 0000

54520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    位运算的妙用 1

    这个系列主要是记录作者本人在学习算法过程中的一些总结 首先呢,我们通过一道题来引出今天所讲到的技巧: 看到这道题,大家会考虑怎么做,我第一次想出的答案就是直接求和,然后减去真正的1~1000数字的和,最后得到的那个数字就是所求...在此之前,大家先学习一下这些位运算的操作符 这道题呢,我们主要是运用 ^ 运算符去求解,也就是左右两个数相同时结果为 0 ,不同时结果为 1,从而达到去重的效果,但是这道题要求的是求出重复的数字...所以,就用这数组中1001个元素去与1~1000的数字去 ^ 那么1001中1 ~ 1000的数字就都出现了两次,通过亦或运算符消除掉了,而原来数组中重复的元素加起来出现了三次,两个被去重了,剩下那个就被留下来了...System.out.println(x1); } //交换元素 public static void swap(int arr[], int index1, int index2...) { int temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp;

    5410

    J 神提问:除以 2 还是右移 1 ?

    最终,每个方法实际上都仅仅使用了一个字节码来操作相关联的整型数运算。它们都使用了 v1 寄存器来保存第一个方法参数,另外还需要一个字面量 1 或者 2。...在 Android 10 Pixel4 的设备上执行相同的指令,来看看 ART 是如何将代码编译成 ARM 汇编代码的。...到此为止,我们可以肯定的说,使用 value 1 来代替 value * 2 不会带来任何好处。停止在算数运算中做这样的事情吧,仅在严格要求按位运算的情况下保留。...到此为止,我们可以肯定的说,使用 value >> 1 来代替 value / 2 不会带来任何好处。停止在算数运算中做这样的事情吧,仅在严格要求按位运算的情况下保留。...在 Android 上,选择 除以2 还是 右移1 ? 都不是!仅在实际需要按位操作时使用移位运算,其他数学运算使用乘除法。我将着手将 AndroidX collection 的位运算切换到乘除法。

    1.2K20

    位1的个数 逻辑位运算符

    逻辑位运算符 位运算就是对二进制数执行计算,是整数的逐位运算。 图片.png & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。...| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1。 ^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1。...~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1。 << 左移 用来将一个数的各二进制位全部左移N位,右补0。...进阶:如果多次调用这个函数,你将如何优化你的算法?...思路及解法 循环检查 1.循环检查给定的整数每一位是否为1; 2.将n跟给定的对应位置上的数字进行与运算,如果两个相应的二进制位都为1,则该位的结果值为1,结果加1,否则为0。

    82430

    初识算法 · 位运算常见总结(1)

    位运算基本总结 在C++部分我们其实已经介绍过了位图,对于位图来说,基础自然是位运算了,那么常见的位运算是: & | ^ >> << ~ 有以上六种运算,>>右移运算符运算符以及~按位取反我们这里不过多介绍了...比如1 + 1等于2,但是进位相加之和就是10,所以该位上为0,也可以使用相同为0的这种记法,个人认为进位相加是比较容易理解的一种记法。...这道题目的思想就是将该x位上的数&上一个1,如果是0,结果就是0,如果是1,结果就是1,如果是用|运算,结果都是1,就没有办法鉴别了。 基础题目二:将一个数的二进制表示的第x位修改成1....这个题目的别名其实是low bit,也就是低位bit的意思,这道题目没有基本的规律还是比较难思考的,基础做法是n & -n,对于获取-n的基础操作我们是将n全部按位取反之后 + 1即可,那么就可以将n的二进制表示的左边全部变成...对于异或运算的基本规律我们介绍3点: 1. a ^ a = 0 2. a ^ 0 = 0 3. a ^ b ^ c = a ^ ( b ^ c) 由这个异或规律,我们可以介绍两个基础题目,136 260

    5710

    O(1)时间检测2的幂次除以2统计1的位数n和n-1取且

    用 O(1) 时间检测整数 n 是否是 2 的幂次。 样例 n=4,返回 true; n=5,返回 false. 除以2 这个当然是很简单也最容易想到,int的话可能要除31次才能出来。...n位有符号数的表示范围: -2^n-- 2^(n-1)-1 原码的表示:     左边是符号位,正数为0,负数为1。...    【+0】反码 = 00000000     【-0】反码 = 11111111   补码的表示:     正数的补码与原码相同,负数的补码由原码的反码加1得到     【+10】补码...再如,将3点的时针调慢一个小时,即调成2点,和将时针向前调整11个小时的效果是一样的。因此用3-1和(3+11)mod(12)的结果一样。补码在机器码中的运用主要是用加法元算代替减法运算。...在8位字中,我们的模就是2的8次方,即256。

    59530

    位运算(位运算的技巧、二进制中1的个数、区间或、异或森林)

    右移相当于对原数进行除以2的幂次方的操作 例如,对于整数13(二进制表示为00001101),执行左移2位操作,相当于执行13/4向下取整。...1.3、位操作符 &    按位与:只要有0就是0,两个同时为1才是1。 |     按位或:只要有1就是1,两个同时为0才是0。 ^    按位异或:相同为0,相异为1。...~    按位取反:将一个数的二进制位0取1,1取0,之后再加一。...int main() { int a = 3; int b = -5; int c = a & b; /*按(二进制)位与运算 计算规则:对应二进制位进行与运算 只要有0就是0,两个同时为...肖恩进入了这片森林,他得到了一个任务:找出数组中满足条件的连续子数组,使得连续子数组中所有元素异或运算结果的因数个数为偶数。完成任务将揭示宝藏的所在地。

    34410

    Datawhale组队学习 -- Task 1:变量、运算符、数据类型及位运算

    true print(not (2 > 1)) # not相当于取反,结果为true加上not就输出反向结果 结果 位运算符 符号 操作符 名称 示例 ~ 按位取反 ~4 & 按位与 4 &...5 | 按位或 4 | 5 ^ 按位异或 4 ^ 5 2 >> 右移 4 >> 2 按位取反(~) 按位取反运算符~为单目运算符(只有一个操作数),右结合性,作用是对参与运算的二进制位取反...(|) 按位或运算符|的运算规则是:两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。...(^) 按位异或运算^的运算规则是:参与运算的两个二进制位不同时,结果为 1,相同时结果为 0。...在内存中的存储) 上面两个可以看出9>>3高位丢的0就补0,(-9)>>3丢的1就补1 如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。

    30760

    探究位运算中的神奇操作:n&(n-1)

    引言 在编程和算法领域,位运算因其高效性和独特性备受青睐。今天,我们就来探讨一个有趣的位运算操作:n&(n-1),看看它究竟有何妙用。...count = 0; scanf("%d", &n); while(n) { n &= (n - 1);//即n=n&(n-1)进行n&(n-1)运算再把得到的结果赋值给n count++...判断一个数是否为2的幂次方   判断一个数是否为2的幂次方,可以通过n&(n-1)来实现。如果一个数是2的幂次方,那么它的二进制表示中只有一个1,其余位都是0。...例如:2(10)、4(100)、8(1000)...都是2的幂次方。 对于这些数,执行n&(n-1)操作后,结果必然为0。...运行结果如下: 总结  n&(n-1)这个位运算操作虽然简单,但其应用场景却非常广泛。

    13310

    JS是如何计算 1+1=2 的?

    我问计算机芸芸部件,1+1究竟是如何计算的,他们都茫然的看着我。...作者问浏览器:“你小子是怎么知道1+1等于2的?纵观人类进化史,从学会使用石头,到学会结绳记数,用了100万年。你年纪轻轻28岁,是怎么知道1+1等于2的?”...这时CPU听到有人叫他的名字,按耐不住了。CPU问:“谁在说俺的大名!v8,那后面的'mov eax,1'是什么?我怎么从来没见你提过?”...例如他看到指令是010100010010,首先从前4位0101判断,这是一个寄存器设置命令,于是就打电话通知寄存器老头来领取数据包裹;如果看到前4位是1010,就知道这是一个加法指令,就打电话通知算术运算单位的加法器来领取数据和任务...所以,我的加法运算能力也不是无限的,能算多大数字是由硬件决定的。” 这下明白了,CPU并不知道1+1等于2。之所以1+1能算出等于2,是人类在设计CPU的时候赋能给它的。

    1.9K20

    为什么补码是按位取反加一_补码为什么加1

    因为你想要的,不是1+1=2,而是,1+1为什么等于2。当然,我们不讨论1+1的问题。我们讨论的,是补码。...但是呢,还有一个问题,为什么补码的求法是按位取反再加一呢,其实当你不明白为什么各大书籍都要用按位取反来计算补码的时候,我们完全可以直接用0减去它就得到他相反数的二进制编码了,譬如随便一个十六进制数 6C...,那么我们可以直接0-6C就得到他的相反数的补码了,结果为十六进制的94,跟按位取反再加一的效果一样。...,你发现了之前一直迷惑你的一个东西,“按位取反再加一”,但是可能还有一点迷惑,我们继续,因为我们每次都是用一个0减去一个数的补码来得到另一个数的补码,也就是里面的(11111111+00000001)是不变的...– 一个数的补码)换成 “按位取反”,也就是 (按位取反)+000000001=它相反数的补码,现在,按位取反,再加一,就终于出来了,这就是各大书籍资料所讲的,补码=按位取反+1..。

    70210

    第 1 课:计算机是如何计算 1+1=2 的?

    对于初学者,我们只需要考虑一个问题:计算机是如何计算 1+1=2 的? 正文 这个问题看似简单,但通过它可以见微知著。所有表面上复杂的软件运行,都是底层简单的节字叠加。...现在我们仅以 JS——JavaScript 的简写,来探究计算机是如何计算 1+1=2 的? 首先,打开谷歌浏览器,右健单击空白处,选择 “检查”: ?...现在在 Console 面板输入我们的算式: 1+1 按下回车键。 我们看到浏览器输出了 2: ? 这个过程看起来很快,但计算机内部其实已经经过 N 多复杂的运算操作。...例如,他看到指令是「010100010010」,首先从前 4 位 0101 判断,这是一个寄存器设置命令,于是就打电话通知寄存器老头来领取数据包裹;如果看到前 4 位是 1010,就知道这是一个加法指令...笔者道,这下明白了,CPU 并不知道 1+1 等于 2,之所以 1+1 能算出等于 2,是人类在设计 CPU 的时候赋能给它的。而 CPU 内所有逻辑的运算,归根结底又都是开关的开合。

    1.9K20

    力扣题(2的幂)——学习到JAVA按位与“&”在“n&(n-1)”中的使用

    如上图,求一个数是不是2的幂,一行代码解决。 那么,(n & (n-1)) == 0是什么意思呢 java中“&”表示按位与操作,他把左右变为二进制然后按位取与。...“n=n&(n-1)”的意思就是 去掉“n的二进制”的最后一个1. 如果A&B==0,表示A与B的二进制形式没有在同一个位置都为1的时候。 这句话到底啥意思??不妨先看下n-1是什么意思。...n&(n-1)=1101010000 由此可以得出,n和n-1的低位不一样,直到有个转折点,就是借位的那个点,从这个点开始的高位,n和n-1都一样,如果高位一样这就造成一个问题,就是n和n-1在相同的位上可能会有同一个...1,从而使((n & (n-1)) !...= 0),如果想要 ((n & (n-1)) == 0),则高位必须全为0,这样就没有相同的1。 所以n是2的幂或0

    53340

    位运算–LC191– 位1的个数___LC231–2的幂___LC190– 颠倒二进制位__LC338– 比特位计数

    位运算的由来 在计算机里面,任何数据最终都是用数字来表示的(不管是我们平时用的软件,看的图片,视频,还是文字)。 并且计算机运算单元只认识高低电位,转化成我们认识的逻辑,也就是 0 1 。...示例 1: 输入: 1 输出: true 解释: 2^0 = 1 示例 2: 输入: 16 输出: true 解释: 2^4 = 16 解题: 由于是2的幂 由二进制的以得到: 16 的 二进制为 0001...示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 方法一:直接计算 最直观的方法是对从 00 到 num 的每个数直接计算「一比特数」。...每个 int 型的数都可以用 32 位二进制数表示,只要遍历其二进制表示的每一位即可得到 1 的数目。 利用位运算的技巧,可以在一定程度上提升计算速度。...按位与运算(&)的一个性质是:对于任意整数 x,令 x=x&(x−1),该运算将 x 的二进制表示的最后一个 1 变成 0。

    49610
    领券