当前位置:首页 » 编程语言 » java二进制运算

java二进制运算

发布时间: 2022-08-03 05:58:21

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
加载更多

热点内容
tomcat编译后的文件 发布:2025-01-23 06:05:46 浏览:253
惠普畅游人14是什么配置表 发布:2025-01-23 05:57:39 浏览:295
简单搭建ftp服务器 发布:2025-01-23 05:49:41 浏览:227
有qq号没密码如何登上 发布:2025-01-23 05:34:08 浏览:469
javajsdes加密 发布:2025-01-23 05:33:21 浏览:770
qq怎么上传视频到电脑上 发布:2025-01-23 05:07:27 浏览:972
如何申请i7服务器地址 发布:2025-01-23 04:42:15 浏览:848
浏览器内核源码 发布:2025-01-23 04:41:34 浏览:662
精英版缤智少了些什么配置 发布:2025-01-23 04:41:30 浏览:359
编写c编译器 发布:2025-01-23 04:41:30 浏览:971