java二进制运算
⑴ java:关于java的二进制与运算,下面的过程是怎么实现的呢
你是想判断每一位是否是1对吧,其实你可以把&某种程度看成乘法(两个二进制数对应的位相乘,都是1则为1,有一个为0就是0),如果你想判断一个数的二进制哪个位置上是否是1,那么你就选定那个位置为1的那个数和这个数&连接,如
你想判断14第二位是否是1,只需用14和这10(3)这个二进制用&连接看是否等于0,想看第三位是否是1,就用14和100这个二进制数用&连接看结果是否是0
⑵ 请教java位运算问题
Java 位运算 Java 位运算[转]一,Java 位运算1.表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (l)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。2.位运算符 位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算。位运算符可以分为逻辑运算符(包括~、&、|和^)及移位运算符(包括>>、>)。1)左移位运算符()则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。3)Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
⑶ 二进制相加 怎么用java实现
两个数相加,会得到一个结果,和一个进位的结果,
然后将这个进位的结果后面加0补位,然后再和这个结果相加。如此递归,知道进位全部是0为
public class $ {
public static void main(String[] args) {
String s0 = "100";// 十进制4
StringBuffer result = new StringBuffer();
StringBuffer jinwei = new StringBuffer();
System.out.println(test(result, jinwei, ));
}
private static String test(StringBuffer result, StringBuffer jinwei, String s0, String {
// 没有进位了就退出
if (s0.length() > 0 && s0.indexOf("1") < 0) {
return s1;
}
//位数补齐
int len0 = s0.length();
int len1 = s1.length();
int minLen = Math.max(len0, len1);
s0 = buqi(len0, minLen) + s0;
s1 = buqi(len1, minLen) + s1;
for (int i = s0.length() - 1; i >= 0; i--) {
String str0 = s0.substring(i, i + 1);
String str1 = s1.substring(i, i + 1);
add(result, jinwei, str0, str1);
}
String tmpJinwei = jinwei.reverse().toString() + "0";
jinwei.delete(0, jinwei.length());
String tmpResult = result.reverse().toString();
result.delete(0, result.length());
return test(result, jinwei, tmpJinwei, tmpResult);
}
private static void add(StringBuffer result, StringBuffer jinwei, String str0, String str1) {
// 00相加为0,不进位
if ("0".equals(str0) && "0".equals(str1)) {
result.append("0");
jinwei.append("0");
return;
}
// 11相加为0,进位1
if ("1".equals(str0) && "1".equals(str1)) {
result.append("0");
jinwei.append("1");
return;
}
// 其他情况,相加为1,不进位
result.append("1");
jinwei.append("0");
}
private static String buqi(int len0, int minLen) {
String tmp = "";
for (int i = len0; i < minLen; i++) {
tmp += "0";
}
return tmp;
}
}
⑷ JAVA中四个二进制位从操作符即(&按位与、|按位货、^按位异或、~按位取反)
首先回答你问的问题:
按位与运算符(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。
另,负数按补码形式参加按位与运算。
“与运算”的特殊用途:
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
(2)取一个数中指定位
方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,
取X的低4位,用 X & 0000 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 = a << 2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移运算符(>>)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
例如:a = a >> 2 将a的二进制位右移2位,
左补0 or 补1 得看被移数是正还是负。
如果还有什么疑问,可以参考一下参考资料
希望我的回答对您有帮助,别忘了采纳答案哦~
⑸ java中二进制怎么表示
一、二进制的表示方法
有0,1组成。以0b开头。
代码的表示方法:
System.out.println(0b100)
二、不同进制的数据表现:
八进制:由0,1,....,7.以0开头。
十进制:由0,1......,9.默认整数。
十六进制:由0,1,......9,a,b,c,d,e,f(大小写均可)组成。
十进制:System.out.println(100);
八进制:System.out.println(0100);
十六进制: System.out.println(0x100);
(5)java二进制运算扩展阅读
java 判断二进制文件的代码:
public static boolean isBinary(File file)
{
boolean isBinary = false;
try {
FileInputStream fin = new FileInputStream(file);
long len = file.length();
for (int j = 0; j < (int) len; j++) {
int t = fin.read();
if (t < 32 && t != 9 && t != 10 && t != 13) {
isBinary = true;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return isBinary;
}
⑹ 跪求“java中二进制怎么表示”
java中二进制的表示:
1、Java中定义两个数,然后分别打印出它们的二进制表示(例如7和-7):
System.out.println("Java二进制7:"+Integer.toBinaryString(7));
System.out.println("Java二进制-7:"+Integer.toBinaryString(-7));
输出:
Java二进制7: 111
Java二进制-7:
7的二进制就是111
-7转化二进制的过程:
(1)把-7转化成7,二进制是 111
(2)Java中对于不满32位的int二进制自动补齐,所以变成了 (29个0)111
(3)然后取反 (29个1)000
(4)然后加1 (29个1)001
(6)java二进制运算扩展阅读:
c语言中二进制的转换:
用函数转换itoa(值,数组名,进制)
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
char str[8];
inti=8;
itoa(i,str,2);
printf("%s",str);
}
⑺ Java:二进制位运算时两个数都是补码吗
二进制数 & 二进制数,这种运算,是按照一位数、一位数、...,相与的。
是不是补码,并没有关系。
是不是补码,都是这样算。
⑻ java的数字二进制输出
首先,java里int是有32位2进制数组成的
我们一般赋值
int
i
=
1;
这个是赋值10进制的数
赋值
2进制要
int
i
=
01;(前面加个0,就表示是2进制数)
赋值16进制(常用)
int
i
=
0x00000001;
(0x表示为16进制数)
3种的值都是1.
要用2进制输出就是Integer.toBinaryString(i)
拓展:
因为计算机处理位运算速度是非常快的(应该是最快的运算)
所以很多时候,如果有一堆boolean变量需要表示时,
一般只用1个int的数表示,如:
int
i
=
0x0000000f;//表示后4位为1
int
m
=
(i
>>
2)
&
1;
//
其中m就是表示某一位的值,2表示右边开始数第2位(当然是从第0位开始算的)
这样就能取具体每一位的值
这种方法在很吃代码效率的程序中经常遇到
全手打,望支持
⑼ java中如何将十进制数字转化成二进制
如果表达小于2^31-1的正数代码如下:
public void binaryToDecimal(int n){
int t = 0; //用来记录位数
int bin = 0; //用来记录最后的二进制数
int r = 0; //用来存储余数
while(n != 0){
r = n % 2;
n = n / 2;
bin += r * Math().pow(10,t);
t++;
}
System.out.println(bin);
}
使用字符串的拼接(+)来实现大于2^31-1的数,代码如下:
public void binaryToDecimal(int n){
String str = "";
while(n!=0){
str = n%2+str;
n = n/2;
}
System.out.println(str);
}
可以右移后再与0x01进行&运算得到第一位的数字判断判断它的第几位上是0,第几位上是1,代码如下:
class ByteMove
{
public static void main(String[] args)
{
int i = 7;
move(i);
}
static void move(int num){
for(int i= 0;i<6;i++){
System.out.println("第"+(i+1)+"位:" + (num >> i & 0x01));
}
}
}
⑽ Java:二进制的按位与操作怎么做求助大神!
//先用链接中的方法,把String a,b 分别转换成byte[]数组data_a和data_b
byte[] data_a=hex2byte(a);
byte[] data_b=hex2byte(b);
byte[] data_c=new byte[a.length]; //结果串
//逐个直接进行位与运算 ()
for(int i=0;i
追问:
谢谢!^是按位异或么?PHP中的^和Java^不同是么?
并且出现了以下问题:(前面两个都OK,损失精度那个是怎么回事啊?强制转换会有问题么)
追答:
1、^符号是异或。
2、代码中需要把你命题中的a、b的定义和数据抄上,能避免“找不到符号”。
3、a.length更正小写
4、损失精度是提示并非错误。由位运算之后精度变成32bit。可以明示为8bit。
data_c[i]=data_a[i]&data_b[i];
改
data_c[i]=(byte)(data_a[i]&data_b[i]);
评论
0
0
加载更多