首页 > 编程知识 正文

java高精度计算,c++和java

时间:2023-05-05 12:38:41 阅读:120212 作者:2324

移位运算符和位运算符本质上操纵二进制位。 因为计算机中存储了二进制数据,所以运算效率相对较高。

移位运算符:将整数的二进制位向左或向右移位。 向左移动一个位相当于这个数乘以2,向右移动一个位,等于这个数除以2

/*移位运算符

将整数的二进制位向左或向右移位

将职位左移,在右侧添加0,

将位向右移动,向左编码位(最高位) )。

无符号按位向右移动,向左移动0*/

classdemo 07 { publicstaticvoidmain (字符串[ ] args ) {int xx=20;

system.out.println(xx1; //40

/*x内存中的二进制格式为:

0000 0000 0000 0000 0000 0000 0001 0100

x1向左移动一位

0000000000000000000000000000000000101000 */system.out.println (xx1 ); //10

/*x内存中的二进制格式为:

0000 0000 0000 0000 0000 0000 0001 0100

x1向右移动一位,向左补充0

00000000000000000000000000000000000000000001010 */xx=-20;

system.out.println(xx1; //-40

/*x内存中的二进制格式为:

1111 1111 1111 1111 1111 1111 1110 1100

x1向左移动一位

111111111111111111111111111111111011011000 */system.out.println (xx1 ); //-10

/*x内存中的二进制格式为:

1111 1111 1111 1111 1111 1111 1110 1100

x1向右移动一个,向左添加一个

111111111111111111111111111111111111111110110 * /

//向左移动一位相当于这个数乘以2,向右移动一位相当于这个数除以2的数

xx=-11;

system.out.println(xx1; //-22

/*x内存中的二进制格式为:

1111 1111 1111 1111 1111 1111 1111 0101

x1向左移动一位

111111111111111111111111111111111111111101010 */xx=-13;

system.out.println(xx1; //-26

/*x内存中的二进制格式为:

1111 1111 1111 1111 1111 1111 1111 0011

x1向左移动一个,向右侧添加0

1111111111111111111111111111111111111111100110 */xx=-11;

system.out.println(xx1; //-6

/*x内存中的二进制格式为:

1111 1111 1111 1111 1111 1111 1111 0101

x1向右移动一个,向左添加一个

111111111111111111111111111111111111110101 */xx=-13;

system.out.println(xx1; //-7

/*x内存中的二进制格式为:

1111 1111 1111 1111 1111 1111 1111 0011

x1向右移动一个,向左添加一个

111111111111111111111111111111111111110011 */xx=-11;

system.out.println(xx1; //2147483642

/*x内存中的二进制格式为:

1111 1111 1111 1111 1111 1111 1111 0101

x1无符号移位1位

0111111111111111111111111111111111111110101 * /

//用一个整数乘以/除以2的幂时,移位运算效率最高

}

}

位运算符:

按位或|按位异或^

/*

位运算符

按位、按位或|、按位异或^、按位反转

如果操作员的左右两侧为布尔值,则为逻辑积;

左右为整数,为位和

*/

类demo 08 {

publicstaticvoidmain (字符串[ ] args ) {

int x=10;

int y=20;

/*按位和

存储在x计算机上的01序列是:

0000 0000 0000 0000 0000 0000 0000 1010

y的二进制格式为:

0000 0000 0000 0000 0000 0000 0001 0100

按位和

-------------请参阅

0000 0000 0000 0000 0000 0000 0000 0000

*/

system.out.println(xy; //0

/*按位或

存储在x计算机上的01序列是:

0000 0000 0000 0000 0000 0000 0000 1010

y的二进制格式为:

0000 0000 0000 0000 0000 0000 0001 0100

按位或|

-------------请参阅

0000 0000 0000 0000 0000 0000 0001 1110

*/

system.out.println(x|y; //30

/*异或

存储在x计算机上的01序列是:

0000 0000 0000 0000 0000 0000 0000 1010

y的二进制格式为:

0000 0000 0000 0000 0000 0000 0001 0100

基于异或的^

-------------请参阅

0000 0000 0000 0000 0000 0000 0001 1110

*/

system.out.println(x^y; //30

/*按位反转

存储在x计算机上的01序列是:

0000 0000 0000 0000 0000 0000 0000 1010

逐位反转

-------------请参阅

1111 1111 1111 1111 1111 1111 1111 0101

*/

system.out.println(~x ); //-11

//如何实现两个数量的即时交换,不通过第三个变量,实现两个变量的交换

x=10;

y=20;

//通常交换两个变量的值

int t=x;

x=y;

y=t;

//方法1:

x=10;

y=20;

x=x y; //x==30

y=x - y; //y==10

x=x - y; //x==20

//方法2:

x=10;

y=20;

x=x ^ y; //x==30

y=x ^ y //y==10

x=x ^ y; //x==20

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。

  •  标签:  
  • java