当前位置:首页 » 编程语言 » java反码

java反码

发布时间: 2022-05-17 09:28:17

A. 原码,反码,补码详解及 java中和的区别

反码即原码是0的时候换成1,1换成0,补码在反码基础上最后一位加1,可以进位

B. Java中取反是怎么算的

5:00000101
取反:11111010
因为数在计算机里是用补码形式存放的...所以要把11111010看做一段补码
现在把补码转化为原码,第一位是符号..不用变..先变成反码..减1就可以..11111001
再变为原码10000110,即-6
5&2
5:00000101
2:00000010
与就是各个位做与运算..
1&0=0
0&0=0
1&1=1
结果就是00000000

C. java中怎么求一个正数和负数的反码拿5和-5举例,谢谢

System.out.println(Integer.toBinaryString(~5));
System.out.println(Integer.toBinaryString(~-5));

D. Java基础,正数取反,各二进制码按补码各位取反;反码取反,各二进制码按补码各位取反。

乱七八糟。按专业角度说,为了解决把二进制整数减法(或负数运算)转换成加法来算的问题(所以你只听过累加器,而没有累减器),就发明了原码,反码,补码。比如一个-2,假设它是八位长度的,原码就是10000010,最高位1表示这是一个负数。反码是11111101,就是除符号位以外把原码各位都取反。补码就是反码加1,即11111110。正数2的补码规定为自身,即00000010。现在把两个数的补码相加,11111110+00000010=100000000。前面我们已假设是在八位字长的环境下运算,现在算出了九位,这样就溢出了,即在八位环境下看,第九位的1是不存在的,结果是00000000,即0。这和我们算2-2的结果是一样的,这就实现了把减法转为加法。另外,java还规定了几个运算,把二进制数作与,或,非,异或,移位等运算,这些都与上面说的三种码没有直接关系,不要弄混了

E. java中二进制-11的源码和反码是多少

正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
以8位为例
11 原码为 0000 1011
-11 原码为 1000 1011
-11 反码为 1111 0100

F. java中按位取反 ~5=-6为什么呀

首先要明确,取反是二进制操作
下面以5为例:
二进制原码:0000
0000
0000
0000
0000
0000
0000
0101
取反操作后:1111
1111
1111
1111
1111
1111
1111
1010
而在Java中,有符号整数都是用补码来表示,而补码=反码+1
1.先求反码:1000
0000
0000
0000
0000
0000
0000
0101
2.再求补码:1000
0000
0000
0000
0000
0000
0000
0110
最高位代表符号位
1
表示负数,0
表示正数
所以结果是-6

G. Java 取反运算符

用以下代码可以实现你要求的功能:
long lang=64509;
String str1=Long.toBinaryString(lang);//将给定的数转为二进制字串
String str2=Long.toBinaryString(~lang);//将给定的数取反转为二进制字串
//将取反后的二进制串取最后的 长度与第一个串长度相等 的子串,这是我们需要的二进制串
String str=str2.substring(str2.length()-str1.length());
//将它转换为十进制整数
int i=Integer.parseInt(str, 2);
System.out.println(i);

具体理论知识如下所示:
先要理解一些概念:
在2进制中,负数是以它正值的补码形式表达
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如 0000 0000 0000 0000 0000 0000 0000 0101是 5的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:将5的二进制表达式的每一位取反,得
1111 1111 1111 1111 1111 1111 1111 1010
称:1111 1111 1111 1111 1111 1111 1111 1010 是 0000 0000 0000 0000 0000 0000 0000 0101 的反码。

反码是相互的,所以也可称:

1111 1111 1111 1111 1111 1111 1111 1010 和 0000 0000 0000 0000 0000 0000 0000 0101 互为反码。

补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
那么,5的补码为:

1111 1111 1111 1111 1111 1111 1111 1010 + 1 =
1111 1111 1111 1111 1111 1111 1111 1011

所以,-5 在计算机中的二进制表达为:
1111 1111 1111 1111 1111 1111 1111 1011
转换为十六进制:0xFFFFFFFB。

====================================

明白了上面的就可以理解怎么求 ~i 了
int型储存32个二进制位,~这个符号是按位取反,就是求i的反码。
即得到1111 1111 1111 1111 1111 1111 1111 1010
上面这串二进制代表一个负数,将它转换成int型过程如下:

1111 1111 1111 1111 1111 1111 1111 1010-1 =
1111 1111 1111 1111 1111 1111 1111 1001

再求反:

0000 0000 0000 0000 0000 0000 0000 0110

这个值就是5的按位取反所得到的int整数的绝对值(注意:5按位取反得到的是负数)

所以转换为int型为:6
即:int型的i=5 取反后的结果为-6

H. JAVA 中的 -> 是什么意思

本文主要是讲解 Java 中的运算符。对于运算符而言是编程参与计算的基础核心内容。最基础的加减乘除取余。到后面的逻辑运算大于小于等于不等于。



本文内容思维导图



先从最简单的算术运算符说起。



算术运算符



算术运算符又分为: 一元运算符和二元运算符, 并且在 Java 中包含三元运算符, 就是条件运算符或者叫作三目运算符只是名字不同,含义相同。



一元运算符



一元运算符只有一个变量就可以进行操作。常用的一元运算符就是自加,自减。一共四个一元运算符。



示例代码, 这里使用 JShell 快速查看结果。



需要注意其中的自加和自减的规则。当运算符在前的时候 ++ a; 运算符的优先级比较高, 所以会先处理这个代码, 所以可以看到代码里面直接返回了结果 4。但是 a ++ 的时候却没有直接返回结果, 因为他的运算符比价低。 所以重新调用该变量就会打印出来当前的值。



代码定义如下:



运行查看结果:



二元运算符



二元运算符一共5个。分辨是加减乘除取余(+、-、*、/、%)。



其中,在进行除法运算的时候,遵守除数不能为 0;



如果除数为 0 就会报错, 错误如下:



代码示例如下:



运行查看结果,编译, 运行:



赋值运算符



对于赋值运算符基本上贯穿了整个类的周期。常用的 = 赋值。 和简写赋值和算术运算符的使用方式。赋值运算符有如下图所示的使用方式。



使用 JShell 进行测试代码如下:



代码示例如下:



inta=0;
a=3;
System.out.println(a);// 3
a+=3;
System.out.println(a);// 6
a-=3;
System.out.println(a);// 3
a*=3;
System.out.println(a);// 9
a/=3;
System.out.println(a);// 3
a%=2;
System.out.println(a);// 1



比较运算符



比较运算符, 也可以说是布尔运算符。 主要是比较两个表达式的结果。 (表达式) 操作符 (表达式)



根据上面的运算符进行案例演示, 一定要动手练习。 更能加深印象。



只要知道比较运算是最终得到一个布尔类型的值。并且在进行比较运算的时候, 一定要注意其优先级。代码这次自己动手做吧。 有上面的演示, 应该很容易就搞定。



逻辑运算符



对于逻辑运算符, 主要就是 3 个。 逻辑与、逻辑或、逻辑非。和数学中的与或非意思一致。



格式: 表达式1 逻辑运算符 表达式2



逻辑运算符大多数情况下会和其他的运算符一起使用, 主要做一些简单或复杂的逻辑运算。 并且通常都是和 if, for 等逻辑表达式一起使用。



简单的说一说, 对于逻辑与和逻辑或不同点。 逻辑与为第一个表达式和第二个表达式都等于真值的情况下才会表达式成立。 逻辑或是第一个表达式为真值的情况下, 就不会在执行第二个表达式。 因为不管第二个表达式是否成立, 该逻辑运算都是真值了。



位运算符



对于任何编程语言而言, 最终的操作都是二进制表示, 因为计算机只认识二进制, 而八进制,十进制或者十六进制都是为了让开发人员方便开发。对于 Java 来说, 也可以针对数的某个值进行运算。这就需要位运算符的参与了。也是为了方便对二进制进行操作。



位运算符主要有一下运算符:



位与 &



按位与和逻辑运算符的逻辑与很类似,一个比较的表达式, 一个是按照位来进行判断。在二进制中, 位与的判断为都为 1 的记做 1 否则记做 0。



按位与规则如下:



0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;



先看一个都是正整数的值 10 & 2。



最终得出结果 0000 1010 & 0000 0010 = 0000 0010 转换成十进制就是2。



对于负值的位与运算有点区别的地方就是参与运算的是补码。



举例说明: 10 & -2



具体如何得到补码, 可以参考我之前写的文章基础类型的相互转换。这里对于负值的情况需要了解什么是原码,反码和补码。参与运算的是补码。-2 的原码是 1000 0010 反码是 1111 1101 补码 在反码的基础最后一位加 1 得到1111 1110。



最终结果得到 0000 1010 & 1111 1110 = 0000 1010 十进制也就是 10。



这个时候怎么校验结果是否正确呢? 直接写 Java 代码就好了, 打开 jshell:



位或 |



按位或, 和逻辑或很类似, 只要二者有一位 1 结果就是 1。



按位或规则如下:



0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;



根据上面的运算得到了 10 | 2 = 10。



负值有略有不同。



还是要灵活运用原码反码和补码,特别是负数的情况下, 因为正数的原码和补码一致。



位反 ~



按位反, 和逻辑非类似。 是对位进行直接取反。



按位反规则如下:



~1 = 0;
~0 = 1;



先用 2 进行运算处理:



在进行 -2 的运算操作



-2 的原码 需要转换成补码, 用补码进行取反运算。 得到 1 的二进制。



代码演示如下:



位异或 ^



位异或是基于二进制的位运算。 采用符号 XOR 在 Java 中使用 ^ 进行表示。两个值相同取 0, 不同的取 1。



按位异或规则如下:



1 ^ 1 = 0;
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;



举例 10 ^ 2



举例 10 ^ -2



代码演示结果的准确性:



异或在代码优化和实际的工作中会经常用到。 后续实战中用到了在详细分析用法, 现在知道进行异或运算即可。



位左移 <<



将一个操作数进行二进制位往左移, 移动后空出来的低位用 0 进行填充。移除的高位舍去。高位丢弃,低位补零。



操作数 << 移动的位数



举例说明 10 << 2



位左移代码演示:



位右移 >>



将一个操作数进行二进制往右移, 移动后,有两种情况,一种有无符号一种是有符号。也就是最高位为 0 移动后高位补 0, 如果最高位(符号位)为 1, 移动后空缺位都为 1.



操作数 >> 移动的位数



举例说明 10 >> 2



对于负数举例 -2 >> 2 空缺位补 1:



位右移代码演示:



注意这两者的区别。



无符号位右移 >>>



这个是和右移操作上是一致的, 但是不管是否最高位(符号位)为 1, 空缺位都使用 0 进行补齐。



操作数 >>> 移动的位数



举例说明 10 >>> 2



对于负数来说。 这里有点区别, 因为对于负值来说, 上面其实都是 32 位, 为了让大家看起来舒服转换成了对应的 8 位的。 因为无符号位右移会改变正负值, 所以 32 位的负值和 8 位的负值是不一致的。



并且 Java 在处理 byte, short , char 等值进行移位操作前, 会先将类型转换成 int 因为 int 占用 32 位。



所以 -2 >>> 2 的时候,8 位运算应该是如下:



因为会先转换成 32 位。 所以 32 位的 -2 等于如下:



也就是结果: 1073741823



无符号位右移代码如下:



理解原理。 更能发现问题。



类型比较运算符



这里说的类型比较是对象的比较。 判断每个定义的变量是否是某个类。该类可以是(接口、抽象类)。



语法规则:



boolean = 变量 instanceof 类



举例说明:



运行查看结果:



这里需要注意:



  • null 值是没有引用的, 所以和任何值都不相等。

  • instanceof 比较的是引用类型, 不能用于基础类型的比较。

  • 条件(三目)运算符

    三目运算在 Java 中只有一个就是 ? :

    三目运算的语法格式:

  • `布尔表达式 ? 表达式1 : 表达式2`

  • 大部分情况下, 对于三目运算是 if 和 else 的简写。举例说明:

  • inta=1;intb=2;

  • Stringmsg=a>b?"a 比 b 大":"a 比 b 小";

  • System.out.println(msg);


  • //上面的结果和下面一致

  • if(a>b){

  • msg="a 比 b 大!";

  • }else{

  • msg="a 比 b 小!";

  • }

  • //msg 是 "a 比 b 小!"
  • 运算符的优先级

    所有的数学运算都是从左向右进行运算的, 对于 Java 来说大部分运算也是遵守从左向右的规则。 但是一元运算符,赋值运算符和三目运算符例外。他们是从右向左进行运算。

    运算符的内容告一段落, 接下来就是开始逻辑表达式的学习。 教程编写不易。希望各位大看官点赞收藏加关注。更多内容大放送。

I. 关于JAVA 中取反问题

在2进制中,负数是以它正值的补码形式表达
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如
0000
0000
0000
0000
0000
0000
0000
0101是
5的
原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0;
0变1)
比如:将5的二进制表达式的每一位取反,得
1111
1111
1111
1111
1111
1111
1111
1010
称:1111
1111
1111
1111
1111
1111
1111
1010

0000
0000
0000
0000
0000
0000
0000
0101
的反码。
反码是相互的,所以也可称:
1111
1111
1111
1111
1111
1111
1111
1010

0000
0000
0000
0000
0000
0000
0000
0101
互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
那么,5的补码为:
1111
1111
1111
1111
1111
1111
1111
1010
+
1
=
1111
1111
1111
1111
1111
1111
1111
1011
所以,-5
在计算机中的二进制表达为:
1111
1111
1111
1111
1111
1111
1111
1011
转换为十六进制:0xFFFFFFFB。
====================================
明白了上面的就可以理解怎么求
~i

int型储存32个二进制位,~这个符号是按位取反,就是求i的反码。
即得到1111
1111
1111
1111
1111
1111
1111
1010
上面这串二进制代表一个负数,将它转换成int型过程如下:
1111
1111
1111
1111
1111
1111
1111
1010-1
=
1111
1111
1111
1111
1111
1111
1111
1001
再求反:
0000
0000
0000
0000
0000
0000
0000
0110
这个值就是5的按位取反所得到的int整数的绝对值(注意:5按位取反得到的是负数)
所以转换为int型为:6
即:int型的i=5
取反后的结果为-6

J. java中-5的反码是怎么计算的 补码呢

先转换成二进制,就清晰了
11111011
逐位取位就是反码
补码就是和 & 0xff
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

热点内容
java输出键 发布:2024-05-08 22:28:02 浏览:143
自然人税收管理系统网络设置服务器地址 发布:2024-05-08 22:21:33 浏览:868
如何在桌上设置密码 发布:2024-05-08 22:21:32 浏览:658
oracle触发器与存储 发布:2024-05-08 22:21:26 浏览:383
100台电脑无盘服务器 发布:2024-05-08 22:12:08 浏览:868
iso手机解压缩 发布:2024-05-08 22:06:12 浏览:315
如何选择好的服务器 发布:2024-05-08 21:53:01 浏览:397
linux无密码登陆 发布:2024-05-08 21:52:55 浏览:508
收件服务器和发件服务器如何设定 发布:2024-05-08 21:47:55 浏览:834
搭建节点ip用什么服务器 发布:2024-05-08 21:46:58 浏览:126