Java中的按位运算

博客大搬家。

生活博客,https://ylxn.wordpress.com

一、位运算符简介:

1.按位与&。如果两个整形数据 a、b 对应位都是1,则结果位才为1,否则为0,(int 最大值0x7fffffff ):

1 int a = 0x7fffffff;
2 int b = 12;
3 int c = 0;
4 int aAndB = a&b; // aAndB is 12
5 int aAndC = a&c; // aAndC is 0

2.按位或|。如果两个操作数都是0,则结果为0,否则为1:

 

1 int a = 0x7fffffff;
2 int b = 12;
3 int c = 0;
4 int aOrB = a|b; //  aOrB is 2147483647
5 int aOrC = a|c;  // aOrC is 2147483647

3.按位取反~。当操作数的二进制表示相同时,1位为0,0位为1:

 

1 int a = 0x7fffffff;
2 int b = 12;
3 int c = 0;
4 a = ~a;  // result is -2147483648
5 b = ~b; // result is -13;
6 c = ~c;  // result is -1;

4.按位异或^。当两个操作位二进制表示相同时结果为0,否则为1:

1 int a = 0x7fffffff;
2 int b = 12;
3 int c = 0;
4 c ^= a; // c is 2147483647
5 b ^= 8; // b is 4
6 a ^= a; // a is 0

5.左移<<。左移右边操作数指定的位数,左边移动的部分补0:

 

1 int a = 0x7fffffff;
2 int c = 3;
3 c <<= 1; // c is 6
4 a <<= 1; // a is -2

6.右移>>。跟左移不同,如果最高位为0,则右移补0。如果最高位为1,则右移补1:

 

 1 int a = 0x7fffffff;
 2 int a = 0x7fffffff;
 3 int b = 0;
 4 int c = 3;
 5 int d = -2;
 6 int e = -1;
 7 c >>= 1; // c is 1
 8 a >>= 1; // a is 1073741823
 9 b >>= 1; // b is 0
10 d >>= 1; // d is -1
11 e >>=1; // d is -1

7.无符号右移>>>。无论最高位是0还是1,左侧被移空的高位都填入0。

二、利用按位运算符,在很多情况下,可以进行方便的计算。

将大写字母变为小写,将小写字母变为大写( charArray[i]^= 32, 因为在ASCII码中,大写字母与小写字母差了32,因此使用异或运算符,通过与 0 相异或,原字符的二进制形式在其他位保留原有的值,在第 6 位相异或,如果原有位为 0 则变为 1, 原有位为 1 则变为 0):

 

1 String tempString = "1a2b3E5F6P7p";
2 char [] charArray = tempString.toCharArray();
3 for(int i = 0; i < charArray.length; i++)
4   if(Character.isLetter(charArray[i])) charArray[i] ^= 32;
56 System.out.println(String.valueOf(charArray)); // result is 1A2B3e5f6p7P

原文地址:https://www.cnblogs.com/ylxn/p/10353889.html

时间: 2024-11-05 11:45:23

Java中的按位运算的相关文章

Java 中的按位运算操作

我是木龙小驴,菜鸟一枚,这里发点文字,大家共同学习交流 位运算符无非就是<<  还有 >> 以及>>> 首先很久很久以前,那时候没有操作系统,只有电,计算机运算跟开关点灯差不多,亮代表开,不亮代表关,然后根据电压的高低来进行记录操作. 所以CPU进行所有处理都是二进制的,也就是1 和 0 组成,比如说十进制的1 就是0001 ,2就是0010,3就是0011. 二进制就是逢二进一,当一个数字,或者是字符,或者是什么东西(在计算机运算时都是二进制)如:0010 00

Java基本数据类型与位运算

Java基本数据类型与位运算 >>赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明确的,已命名的变量.也就是说,必须有一个物理空间可以存储等号右边的值.分类 基本数据类型 与 类数据类型 的不同1. 对基本数据类型的赋值是很简单的.基本数据存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方.2. 但是在为

java加密解密算法位运算

一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算会把加密后的字符串还原为原有字符串的值.效果图如下: 二.实现过程 1 package com.itxxz; 2 3 import java.util.Scanner; 4 5 /** 6 * java加密解密算法 7 * 8 * @author 螃蟹 9 * 网站:IT学习者 10 * 网址:ht

【转】Cocoa中的位与位运算

转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算).(摘自wikipedia) OC作为c的扩展和超集,位运算自然使用的是c的操作符.c提供了6个位操作符,$,|,^,~,<<,>>.本文不打算做位运算的基础教学,只介绍一

关于java中Double类型的运算精度问题

标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.

Java中i = i++的运算结果

在C/C++中,i = i++的运算结果是不确定的,但是在Java中,结果是确定的. int i = 5; i = i++; System.out.println(i); 输出结果为:5   int i = 5; i = ++i; System.out.println(i); 输出结果为:6   使用javap反汇编后,汇编代码如下: 0: iconst_5 //常量5 1: istore_1 //赋值 将常量5赋值给i 2: iload_1 //读取 3: iinc 1, 1 //自加1 6:

状压dp中常用的位运算式子

原址:状压dp入门 为了更好的理解状压dp,首先介绍位运算相关的知识. 1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值.例如3(11)&2(10)=2(10). 2.’|’符号,x|y,会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值.例如3(11)|2(10)=3(11). 3.’^’符号,x^y,会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值.例如3(11)^2(10)=1(01). 4.’<<’符号

状态压缩中常用的位运算(DP)

面对位运算,一直很无感...可能数学太差,脑洞太小. 1.首先是最基本的: 与&,或|,非~,异或^. 2.获取一个或者多个固定位的值: 假设 x = 1010(二进制),我们要取左数第二位的值,可以用(x &(1<<1)); 还可用(x&(3<<2))来取得第三位和第四位. 3.把一个或者多个固定的位上的值清零: 同样 x = 1010(二进制),我们要使左数第二位的值清零,可以用(x^(1<<1)). 待续..

对硬件编程中常用的位运算概述

位运算就是将对应的数值转化为二进制然后按位进行相应的运算.(好吧,这个概念是我自己的理解...) 下面的叙述指示结合个人的经历与理解,肯定是不够全面.甚至不够准确的,只是希望抛砖引玉,同时也作为自己对位运算这一块的一个简单总结. 位运算主要包括:位与(&).位或(|).位取反(~).位异或(^).左移(<<).右移(>>)六种下面分别介绍. 1.  位与(&). 这个和逻辑运算符 与(&&) 是不是长得像?他们的功能也异曲同工!运算的两位同时为1时结