java代码二进制数取反 java二进制码的作用

Java 取反运算符用以下代码可以实现你要求java代码二进制数取反的功能:
long lang=64509;
String str1=Long.toBinaryString(lang);//将给定的数转为二进制字串
String str2=Long.toBinaryString(~lang);//将给定的数取反转为二进制字串
//将取反后的二进制串取最后的长度与第一个串长度相等的子串 , 这是java代码二进制数取反我们需要的二进制串
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,得0java代码二进制数取反;原为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 10101 =
1111 1111 1111 1111 1111 1111 1111 1011
所以,-5 在计算机中的二进制表达为:
1111 1111 1111 1111 1111 1111 1111 1011
转换为十六进制:0xFFFFFFFB 。
====================================
明白java代码二进制数取反了上面的就可以理解怎么求 ~i java代码二进制数取反了
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
Java二进制反转【java代码二进制数取反 java二进制码的作用】public class BinaryReverse
{
private static String s = null;
public static void main(String[] args)
{
BinaryReverse br = new BinaryReverse();
Scanner sc = new Scanner(System.in);
byte tempbyte;
System.out.println("请输入要反转的数字:");
s = sc.nextLine();
tempbyte = Byte.valueOf(s);
tempbyte = br.converse(tempbyte);//开始反转
System.out.println("翻反转后十进制: "tempbyte);
}
public Byte converse(Byte c)
{
String binaryString = null;
StringBuffer needAdd = new StringBuffer();
binaryString = Integer.toBinaryString(Math.abs(c));
System.out.println(binaryString);
if (s.startsWith("-"))
{
if (binaryString.length()8)
{
needAdd.append("1");
}
}
else
{
if (binaryString.length()8)
{
needAdd.append("0");
}
}
for (int i = 0; i(7 - binaryString.length()); i)
{
needAdd.append("0");
}
binaryString = needAdd.append(binaryString).toString();
System.out.println("原数二进制为: "binaryString);
String reverseString = needAdd.reverse().toString();
System.out.println("反转后二进制为: "reverseString);
if (s.startsWith("-"))
{
int i = 0;
for (int j =reverseString.length(),y = 0 ; j1 ; j--,y)
{
i = (int) (iInteger.valueOf(reverseString.charAt(j-1) "")*Math.pow(2,y));
}
if (reverseString.charAt(0) == '1')
{
i = -i;
}
return (byte)i;
}
return Byte.valueOf(reverseString,2);
}
}
不要忘了加分哦
java中按位取反运算的详解按位取反就是每一位都取反java代码二进制数取反,所谓取反就是1变0,0变1
比如楼主说java代码二进制数取反的10
二进制表示就是00000000
00000000
00000000
00001010
取反后就是11111111
11111111
11111111
11110101
这在十进制中就是-11
而java代码二进制数取反他java代码二进制数取反的二进制原码表示就是-1011
Java基础,正数取反 , 各二进制码按补码各位取反;反码取反 , 各二进制码按补码各位取反 。乱七八糟 。按专业角度说java代码二进制数取反 , 为了解决把二进制整数减法(或负数运算)转换成加法来算的问题(所以java代码二进制数取反你只听过累加器,而没有累减器),就发明了原码,反码,补码 。比如一个-2,假设它是八位长度的,原码就是10000010 , 最高位1表示这是一个负数 。反码是11111101,就是除符号位以外把原码各位都取反 。补码就是反码加1,即11111110 。正数2的补码规定为自身,即00000010 。现在把两个数的补码相加,11111110 00000010=100000000 。前面java代码二进制数取反我们已假设是在八位字长的环境下运算,现在算出了九位,这样就溢出了,即在八位环境下看 , 第九位的1是不存在的,结果是00000000,即0 。这和我们算2-2的结果是一样的 , 这就实现了把减法转为加法 。另外,java还规定了几个运算,把二进制数作与 , 或,非,异或,移位等运算,这些都与上面说的三种码没有直接关系,不要弄混了
JAVA中四个二进制位从操作符即(&按位与、|按位货、^按位异或、~按位取反)首先回答你问java代码二进制数取反的问题java代码二进制数取反:
按位与运算符()
参加运算的两个数据,按二进制位进行“与”运算 。
运算规则:00=0;01=0;10=0;11=1;
即:两位同时为“1” , 结果才为“1”,否则为0
例如:35即 0000 00110000 0101 = 0000 0001因此,35的值得1 。
另,负数按补码形式参加按位与运算 。
“与运算”的特殊用途:
(1)清零 。如果想将一个单元清零,即使其全部二进制位为0 , 只要与一个各位都为零的数值相与,结果为零 。
(2)取一个数中指定位
方法:找一个数,对应X要取的位 , 该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位 。
例:设X=10101110,
取X的低4位 , 用 X0000 1111 = 0000 1110 即可得到;
还可用来取X的2、4、6位 。
按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算 。
运算规则:0|0=0;0|1=1;1|0=1;1|1=1;
即 :参加运算的两个对象只要有一个为1 , 其值为1 。
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111因此,3|5的值得7 。
另,负数按补码形式参加按位或运算 。
“或运算”特殊作用:
(1)常用来对一个数据的某些位置1 。
方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零 。此数与X相或可使X中的某些位置1 。
例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到 。
异或运算符(^)
参加运算的两个数据,按二进制位进行“异或”运算 。
运算规则:0^0=0;0^1=1;1^0=1;1^1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0 。
“异或运算”的特殊作用:
(1)使特定位翻转找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可 。
例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到 。
(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110 。
从上面的例题可以清楚的看到这一点 。
取反运算符(~)
参加运算的一个数据,按二进制位进行“取反”运算 。
运算规则:~1=0;~0=1;
即:对一个二进制数按位取反,即将0变1,1变0 。
使一个数的最低位为零,可以表示为:a~1 。
~1的值为1111111111111110,再按“与”运算,最低位一定为0 。因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高 。
然后在附送你两个为运算符的解释:
左移运算符()
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃 , 右边补0) 。
例:a = a2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2 。
右移运算符()
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃 。
操作数每右移一位 , 相当于该数除以2 。
例如:a = a2 将a的二进制位右移2位,
左补0 or 补1 得看被移数是正还是负 。
如果还有什么疑问,可以参考一下参考资料
希望我的回答对您有帮助,别忘了采纳答案哦~
JAVA中的按位取反什么意思按位取反
~01101101
10010010
结论:对二进制数按位取反,即0变成1 , 1变成0 。
java代码二进制数取反的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java二进制码的作用、java代码二进制数取反的信息别忘了在本站进行查找喔 。

    推荐阅读