首页编程java编程java bitwise是什么,java中的位运算符及其用法。

java bitwise是什么,java中的位运算符及其用法。

编程之家2023-10-12103次浏览

各位老铁们,大家好,今天由我来为大家分享java bitwise是什么,以及java中的位运算符及其用法。的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

java bitwise是什么,java中的位运算符及其用法。

java中的位运算符及其用法。

位逻辑运算符有“与”(AND)、“或”(OR)、“异或(XOR)”、“非(NOT)”,分别用“&”、“|”、“^”、“~”表示。

下面的例子说明了位逻辑运算符:

// Demonstrate the bitwise logical operators.

java bitwise是什么,java中的位运算符及其用法。

class BitLogic{

public static void main(String args[]){

String binary[]={

java bitwise是什么,java中的位运算符及其用法。

"0000","0001","0010","0011","0100","0101","0110","0111",

"1000","1001","1010","1011","1100","1101","1110","1111"

};

int a= 3;// 0+ 2+ 1 or 0011 in binary

int b= 6;// 4+ 2+ 0 or 0110 in binary

int c= a| b;

int d= a& b;

int e= a ^ b;

int f=(~a& b)|(a&~b);

int g=~a& 0x0f;

System.out.println(" a="+ binary[a]);

System.out.println(" b="+ binary[b]);

System.out.println(" a|b="+ binary[c]);

System.out.println(" a&b="+ binary[d]);

System.out.println(" a^b="+ binary[e]);

System.out.println("~a&b|a&~b="+ binary[f]);

System.out.println("~a="+ binary[g]);

}

}

在本例中,变量a与b对应位的组合代表了二进制数所有的 4种组合模式:0-0,0-1,1-0,和1-1。“|”运算符和“&”运算符分别对变量a与b各个对应位的运算得到了变量c和变量d的值。对变量e和f的赋值说明了“^”运算符的功能。字符串数组binary代表了0到15对应的二进制的值。在本例中,数组各元素的排列顺序显示了变量对应值的二进制代码。数组之所以这样构造是因为变量的值n对应的二进制代码可以被正确的存储在数组对应元素binary[n]中。例如变量a的值为3,则它的二进制代码对应地存储在数组元素binary[3]中。~a的值与数字0x0f(对应二进制为0000 1111)进行按位与运算的目的是减小~a的值,保证变量g的结果小于16。因此该程序的运行结果可以用数组binary对应的元素来表示。该程序的输出如下:

a= 0011

b= 0110

a|b= 0111

a&b= 0010

a^b= 0101

~a&b|a&~b= 0101

~a= 1100

左移运算符

左移运算符<<使指定值的所有位都左移规定的次数。它的通用格式如下所示:

value<< num

这里,num指定要移位值value移动的位数。也就是,左移运算符<<使指定值的所有位都左移num位。每左移一个位,高阶位都被移出(并且丢弃),并用0填充右边。这意味着当左移的运算数是int类型时,每移动1位它的第31位就要被移出并且丢弃;当左移的运算数是long类型时,每移动1位它的第63位就要被移出并且丢弃。

在对byte和short类型的值进行移位运算时,你必须小心。因为你知道Java在对表达式求值时,将自动把这些类型扩大为 int型,而且,表达式的值也是int型。对byte和short类型的值进行移位运算的结果是int型,而且如果左移不超过31位,原来对应各位的值也不会丢弃。但是,如果你对一个负的byte或者short类型的值进行移位运算,它被扩大为int型后,它的符号也被扩展。这样,整数值结果的高位就会被1填充。因此,为了得到正确的结果,你就要舍弃得到结果的高位。这样做的最简单办法是将结果转换为byte型。下面的程序说明了这一点:

// Left shifting a byte value.

class ByteShift{

public static void main(String args[]){

byte a= 64, b;

int i;

i= a<< 2;

b=(byte)(a<< 2);

System.out.println("Original value of a:"+ a);

System.out.println("i and b:"+ i+""+ b);

}

}

该程序产生的输出下所示:

Original value of a: 64

i and b: 256 0

因变量a在赋值表达式中,故被扩大为int型,64(0100 0000)被左移两次生成值256(10000 0000)被赋给变量i。然而,经过左移后,变量b中惟一的1被移出,低位全部成了0,因此b的值也变成了0。

既然每次左移都可以使原来的操作数翻倍,程序员们经常使用这个办法来进行快速的2的乘法。但是你要小心,如果你将1移进高阶位(31或63位),那么该值将变为负值。下面的程序说明了这一点:

// Left shifting as a quick way to multiply by 2.

class MultByTwo{

public static void main(String args[]){

int i;

int num= 0xFFFFFFE;

for(i=0; i<4; i++){

num= num<< 1;

System.out.println(num);

}

}

}

该程序的输出如下所示:

536870908

1073741816

2147483632

-32

初值经过仔细选择,以便在左移 4位后,它会产生-32。正如你看到的,当1被移进31位时,数字被解释为负值。

右移运算符

右移运算符>>使指定值的所有位都右移规定的次数。它的通用格式如下所示:

value>> num

这里,num指定要移位值value移动的位数。也就是,右移运算符>>使指定值的所有位都右移num位。

下面的程序片段将值32右移2次,将结果8赋给变量a:

int a= 32;

a= a>> 2;// a now contains 8

当值中的某些位被“移出”时,这些位的值将丢弃。例如,下面的程序片段将35右移2次,它的2个低位被移出丢弃,也将结果8赋给变量a:

int a= 35;

a= a>> 2;// a still contains 8

用二进制表示该过程可以更清楚地看到程序的运行过程:

00100011 35

>> 2

00001000 8

将值每右移一次,就相当于将该值除以2并且舍弃了余数。你可以利用这个特点将一个整数进行快速的2的除法。当然,你一定要确保你不会将该数原有的任何一位移出。

右移时,被移走的最高位(最左边的位)由原来最高位的数字补充。例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位)(sign extension),在进行右移操作时用来保持负数的符号。例如,–8>> 1是–4,用二进制表示如下:

11111000–8

>>1

11111100–4

一个要注意的有趣问题是,由于符号位扩展(保留符号位)每次都会在高位补1,因此-1右移的结果总是–1。有时你不希望在右移时保留符号。例如,下面的例子将一个byte型的值转换为用十六进制表示。注意右移后的值与0x0f进行按位与运算,这样可以舍弃任何的符号位扩展,以便得到的值可以作为定义数组的下标,从而得到对应数组元素代表的十六进制字符。

// Masking sign extension.

class HexByte{

static public void main(String args[]){

char hex[]={

'0','1','2','3','4','5','6','7',

'8','9','a','b','c','d','e','f''

};

byte b=(byte) 0xf1;

System.out.println("b= 0x"+ hex[(b>> 4)& 0x0f]+ hex[b& 0x0f]);

}

}

该程序的输出如下:

b= 0xf1

无符号右移

正如上面刚刚看到的,每一次右移,>>运算符总是自动地用它的先前最高位的内容补它的最高位。这样做保留了原值的符号。但有时这并不是我们想要的。例如,如果你进行移位操作的运算数不是数字值,你就不希望进行符号位扩展(保留符号位)。当你处理像素值或图形时,这种情况是相当普遍的。在这种情况下,不管运算数的初值是什么,你希望移位后总是在高位(最左边)补0。这就是人们所说的无符号移动(unsigned shift)。这时你可以使用Java的无符号右移运算符>>>,它总是在左边补0。下面的程序段说明了无符号右移运算符>>>。在本例中,变量a被赋值为-1,用二进制表示就是32位全是1。这个值然后被无符号右移24位,当然它忽略了符号位扩展,在它的左边总是补0。这样得到的值255被赋给变量a。

int a=-1;

a= a>>> 24;

下面用二进制形式进一步说明该操作:

11111111 11111111 11111111 11111111 int型- 1的二进制代码

>>> 24无符号右移24位

00000000 00000000 00000000 11111111 int型255的二进制代码由于无符号右移运算符>>>只是对32位和64位的值有意义,所以它并不像你想象的那样有用。因为你要记住,在表达式中过小的值总是被自动扩大为int型。这意味着符号位扩展和移动总是发生在32位而不是8位或16位。这样,对第7位以0开始的byte型的值进行无符号移动是不可能的,因为在实际移动运算时,是对扩大后的32位值进行操作。下面的例子说明了这一点:

// Unsigned shifting a byte value.

class ByteUShift{

static public void main(String args[]){

char hex[]={

'0','1','2','3','4','5','6','7',

'8','9','a','b','c','d','e','f'

};

byte b=(byte) 0xf1;

byte c=(byte)(b>> 4);

byte d=(byte)(b>>> 4);

byte e=(byte)((b& 0xff)>> 4);

System.out.println(" b= 0x"

+ hex[(b>> 4)& 0x0f]+ hex[b& 0x0f]);

System.out.println(" b>> 4= 0x"

+ hex[(c>> 4)& 0x0f]+ hex[c& 0x0f]);

System.out.println(" b>>> 4= 0x"

+ hex[(d>> 4)& 0x0f]+ hex[d& 0x0f]);

System.out.println("( b& 0xff)>> 4= 0x"

+ hex[(e>> 4)& 0x0f]+ hex[e& 0x0f]);

}

}

该程序的输出显示了无符号右移运算符>>>对byte型值处理时,实际上不是对byte型值直接操作,而是将其扩大到int型后再处理。在本例中变量b被赋为任意的负byte型值。对变量b右移4位后转换为byte型,将得到的值赋给变量c,因为有符号位扩展,所以该值为0xff。对变量b进行无符号右移4位操作后转换为byte型,将得到的值赋给变量d,你可能期望该值是0x0f,但实际上它是0xff,因为在移动之前变量b就被扩展为int型,已经有符号扩展位。最后一个表达式将变量b的值通过按位与运算将其变为8位,然后右移4位,然后将得到的值赋给变量e,这次得到了预想的结果0x0f。由于对变量d(它的值已经是0xff)进行按位与运算后的符号位的状态已经明了,所以注意,对变量d再没有进行无符号右移运算。

B= 0xf1

b>> 4= 0xff

b>>> 4= 0xff

(b& 0xff)>> 4= 0x0f

位运算符赋值

所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。例如,下面两个语句都是将变量a右移4位后赋给a:

a= a>> 4;

a>>= 4;

同样,下面两个语句都是将表达式a OR b运算后的结果赋给a:

a= a| b;

a|= b;

下面的程序定义了几个int型变量,然后运用位赋值简写的形式将运算后的值赋给相应的变量:

class OpBitEquals{

public static void main(String args[]){

int a= 1;

int b= 2;

int c= 3;

a|= 4;

b>>= 1;

c<<= 1;

a ^= c;

System.out.println("a="+ a);

System.out.println("b="+ b);

System.out.println("c="+ c);

}

}

该程序的输出如下所示:

a= 3

b= 1

c= 6

c语言里++是什么意思

C语言中“++”是自加的意思。

1、自加,有两种用法:假如定义了一个变量i=1

(1)若使用i++,指代先取i的值再另i=i+1

(2)若使用++i,指代先使i=i+1再取i的值

2、C语言中的运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

扩展资料:

C语言的语法结构:

1、顺序结构:程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

2、选择结构:程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用选择结构。

3、循环结构:可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构。

具体内容:

1、for循环:for循环结构是c语言中最具有特色的循环语句,使用最为灵活方便,它的一般形式为:

for(表达式1;表达式2;表达式3)循环体语句。(其中;不能省略)

for循环语句是c语言种功能最为强大的语句,甚至在一定程度上可以代替其他的循环语句。

2、do:

do循环结构,do 1 while⑵;的执行顺序是1->2->1...循环,2为循环条件。

3、while:

while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件

以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

参考资料来源:C语言-百度百科

编程序常用英语单词是什么

1.architecture架构、系统架构体系结构;在EDA的PLD中用于标识结构体。通常情况下它也指软件结构。

2.command line命令列、命令行(系统文字模式下的整行执行命令)。计算机语句里的命令行。

3.context背景关系、周遭环境、上下脉络环境、上下文。可以理解为Context是为计算机提供了一个应用的运行环境。

4.database schema数据库结构纲目。Schema是用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。

5.exception handling异常处理、异常处理机制异常处理、异常处理机制。

6.generic泛型、一般化的一般化的、通用的、泛化。泛型是程序设计语言的一种特性。

7.const常数(constant的缩写,C++关键字)。const限定符,它把一个对象转换成一个常量。

扩展资料:

编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。

编程语言,是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。

编程语言俗称"计算机语言",种类非常的多,总的来说可以分成机器语言、汇编语言、高级语言三大类。电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。

OK,本文到此结束,希望对大家有所帮助。

java实施具体什么工作(java语言实施干什么的)java中ol表示什么 汇编语言中$+4表示什么意思