//Java中的位运算
/*计算机由复杂电子元器件构成,一个电子元器件有带电和不带电的两种状态,1和0
多个这样的元器件的组合可以表示更多状态,也就是可以表示更多的数据,
一个元器件可以表示一位(bit)数据,这种表示数据的方式称为2进制
在实际的电子设备中,将8个元器件组合在一起,形成一个单元,这样的单元叫做一个字节(byte)
一个字节能表示2^8=256个数,即0-255
2个字节能表示2^16个数,即0-2^16-1
4个字节能表示2^32个数,即0-2^32-1
一个字节(byte)由8个二进位(bit)组成,
最右边的称为最低有效位,最左边的称为最高有效位
每一个二进位的值都是0或1*/
/*在计算机中常采用16位进制的方法,因为二进制书写太长,容易出错
16进制的f代表十进制中的15,在二进制中需要4位(bit)1111来书写
16进制中的ff代表十进制的255,在二进制中需要8位(bit)11111111来书写*/
//在计算机中只有数值,可以用数值表示不同的含义,如内存的数值可代表不同的含义
//原码、反码和补码
/*原码:将最高位作为符号位(1为负,0为正),其余各位代表数值本身的绝对值(二进制表示)
以一个字节的数值为例:
+7:00000111
-7:10000111
而问题在于:
+0:00000000
-0:10000000
这样表示数值不唯一,因而在计算机中很少采用原码*/
/*反码:一个数如果为正,则它的反码和原码相同,如果为负,符号位为1,其余各位对原码取反
如:
+7的原码是:00000111
+7的反码是:00000111
-7的原码是:10000111
-7的反码是:11111000
问题还是:
+0的反码是:00000000
-0的反码是:11111111*/
/*补码:利用溢出,我们可以将减法变成加法//主要就是怎么操作、运算,使结果满足我们的需要
对于十进制,如果要从9得到结果5,我们可以用减法:
9-4=5
因为4+6=10,我们将6作为4的补数,将上式的减法改成加法:
9+6=15
去掉高位1(也就是减去10),得到结果5
对于16进制,如果从C得到结果5,我们可以用减法:
C-7=5
因为7+9=16,我们将9作为7的补数,将上式的减法改成加法:
C+9=15(十进制中21)
去掉高位1(也就是减去16),得到结果5*/
/*在计算机中,如果我们采用1个字节来表示一个数,则这个字节有8位(bit)
超过8位(bit)就进1,在内存中情况为:
1 00000000
进位1被丢弃*/
/*补码:如果一个数如果为正,则它的原码、反码和补码相同
如果一个数为负,则符号位为1,其余各位对原码取反,然后整个数加1
为了简单起见,以一个字节来表示一个整数:
+7的原码为:00000111
+7的补码为:00000111
-7的原码为:10000111
-7的补码为:11111000//第一步取反
+1//第二步加1
----
11111001//得到结果
0的补码表示为:
+0的补码为:00000000
-0的补码为:10000000
第一步 取反:11111111
第二步 加1:100000000
第三步进位1被丢弃,得到结果00000000与+0的表示相同*/
/*已知一个负数的补码,转换成十进制数,步骤为:
1.先对各位取反
2.将其转换成十进制数
3.加上符号,再减去1
例如:11111010,最高位是1,是负数,先对各位取反,变成00000101;
转换成十进制数5,加上符号,变成-5,再减去1,变成-6*/
//位运算符(是对位(bit)进行运算,而不是对数值进行运算)
/*Java中有4个位运算符:
& 按位与
| 按位或
^ 按位异或
~ 按位取反
1.按位与
01101101
&
00110111
----
00100101
结论:按位与,只有壹(1)壹(1)与操作为1
2.按位或
01101101
|
00110111
----
01111111
结论:按位或,只有零(0)零(0)或操作为0
3.按位异或
01101101
^
00110111
----
01011010
结论:按位异或,只有零(0)壹(1)或者壹(1)零(0)异或操作为1
4.按位取反
~ 01101101
----
10010010
结论:按位取反,只要将1变成0,0变成1
//Java中的移位运算符
/*java中三个移位运算符:
左移:<<
带符号右移:>>
无符号右移:>>>
class count
{
public static void main(String[] argus)
{
int i1=-1;
int i2=i1<<2;
System.out.println(i1);
System.out.println(i2);
int i3=0xffffffff;
int i4=i3<<2;
System.out.println(i3);
System.out.println(i4);
}
}
分享到:
相关推荐
### Java中的位运算 #### 一、概述 位运算(Bitwise Operators)是计算机科学中的一个基础概念,它直接作用于二进制位上。在Java语言中,位运算符可以应用于所有整型数据类型,如`long`、`int`、`short`、`char`和...
位运算在Java编程中是底层操作,用于直接处理二进制数据,对于理解计算机内部机制和优化代码性能至关重要。本文将深入探讨位运算的相关知识,包括计算机中数据的表示方法、二进制计数系统、以及原码、反码和补码的...
### Java中的位运算知识点 #### 一、位运算概述 位运算是计算机科学中的一个基本概念,它直接针对二进制位进行操作。在Java语言中,提供了多种位运算符来处理二进制数据,这对于优化算法性能、提高程序效率等方面...
本文将深入探讨Java中的位运算,包括位运算符、它们的工作原理以及在实际编程中的应用。 #### 位运算符及其功能 Java提供了多种位运算符,用于对整数类型的位进行操作。这些类型包括`long`、`int`、`short`、`char...
Java中的位运算是一种高效的操作,它是直接针对二进制位进行操作,因此在处理特定问题,如加密算法和图形算法时,位运算可以提供较高的性能。在Java中,位运算符包括右移(>>>),左移(),无符号右移(>>),按位与(&),按位...
Java位运算操作 左位移 右位移 与或非的操作
Java位运算是一种底层操作,它直接作用于二进制位,是计算机科学中的基础操作。在Java编程中,位运算可以用于高效地处理数据,尤其是在处理数组、位集或者进行低级优化时非常有用。本篇文章将深入探讨Java中的位运算...
Java中的位运算是一种高效的操作方式,它可以直接对二进制数据进行操作,广泛应用于各种算法和数据处理中。本文将详细介绍这些位运算的应用,并通过具体的例子来解释它们的工作原理。 1. **奇偶数判断**:`a&1`可以...
本节将详细介绍十六进制字符串的按位异或运算以及如何在Java中实现这一运算。 十六进制字符串是由0到9和A到F(或a到f)组成的字符序列,每个字符代表4位二进制数。例如,十六进制数"AB"在二进制下表示为10101011。...
Java位运算在编程中是一种非常基础且强大的操作,它直接作用于二进制位,能够进行高效的数值处理和数据操作。本文将深入讲解Java中的位运算,并通过雪花算法的应用实例来进一步阐述其重要性和用法。 1. **位运算...
java位运算例子,一看就懂,包含符号介绍,每个符号都有相应的例子。
Java位运算是一种在计算机科学中广泛使用的操作,它涉及到对二进制位的直接操作,包括按位与、按位或、按位异或、按位非、左移、右移以及无符号右移等。这些操作对于理解底层计算原理、优化代码性能以及在特定场景下...
java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java ...
在Java中,可以将每个二进制位视为一个独立的乘法运算,然后将结果组合起来。 5. **二进制除法**: 二进制除法稍微复杂一些,通常涉及多次右移(>>>运算符)和与运算(&)来模拟长除法的过程。每次右移相当于除以2,...
经常项目中用到的Java的位运算相关的方法,稍微整理了下 详细介绍可参考博客 http://longshaojian.iteye.com/admin/blogs/1946865 请多指教!
Java生成算数运算中文图片验证码的实现,结合了编程语言、图像处理和安全验证的多种技术,为用户提供了一种既安全又友好的验证方式。下面我们将深入探讨这个主题。 首先,验证码的核心是生成随机的算数运算表达式。...
Java 位运算是编程语言中的一种底层操作,它允许我们直接对整数类型的数据进行按位操作,包括按位与(&)、按位或(|)、按位异或(^)、按位非(~)以及左移()、右移(>>)和无符号右移>>>。这些操作在处理二进制数据、优化...
Java位运算大全涵盖了Java中位运算的基本概念、运算符以及其应用。位运算是一种直接对整数型数据的二进制位进行操作的运算,它可以用于高效地处理数据,尤其在系统底层开发和算法设计中至关重要。 首先,位运算的...