首先要了解各个进制数之间的转换
例如:
十进制数 -> 二进制数
0 -> 0
1 -> 1
2 -> 10
3 -> 11
4 -> 100
举例(计算机字长为8为列):
十进制数5:
原码: 0000 0101
反码:正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反
0000 0101
补码:正数的补码与其原码相同,负数的补码为其反码在最低位加1
0000 0101
十进制数 -5:
原码: 0000 0101
反码: 1111 1010
补码: 1111 1011
位与(&)
运算规则:一真一假即为假,两假为假,两真为真。
例:0&0=0; 0&1=0; 1&0=0; 1&1=1;
//0 1 10 11 100 101 110 111 1000 1001 //0 1 2 3 4 5 6 7 8 9 int a = 5;//0 0101 int b = 6;//0 0110 //----------------------------------- //0 0100 System.out.println(a&b); //结果为4 //判断int型变量a是奇数还是偶数 //偶数的最后一位都是0 0&1 =》为0 所以结果只有0和1两个值 //a&1 = 0 偶数 //a&1 = 1 奇数 // & 和 && //前面是位运算符 ,后面是逻辑运算符。对于A&B,不管A是否为假,仍然要判断B。而A&&B 第一个不成立就不会去判断第二个了 if(a==b&b==c){ } //用&的话 程序会先判断a是否=b 如果不等于. 还要跳过判断b是否=c. if(a==b&&b==c){ } //&&的话..程序判断a!=b的话 直接后面的b是否=c就不做判断了
位或(|)
运算规则:有真则真,两假为假。
例:0|0=0; 0|1=1; 1|0=1; 1|1=1;
//0 1 10 11 100 101 110 111 1000 1001 //0 1 2 3 4 5 6 7 8 9 int a = 5;//0 0101 int b = 6;//0 0110 //----------------------------------- //00111 System.out.println(a|b); //结果7 // | 和 || //前面是位运算符 ,后面是逻辑运算符。对于A|B,不管A是否为假,仍然要判断B。而A||B 第一个成立就不会去判断第二个了
位异或(^)
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0
//0 1 10 11 100 101 110 111 1000 1001 //0 1 2 3 4 5 6 7 8 9 int a = 5;//0 0101 int b = 6;//0 0110 //----------------------------------- //0 0011 System.out.println(a^b); //结果3
//不用第三变量,交互两个数的值 public static void swap(){ int a = 4; int b = 2; a ^= b; //a = a^b; a = 1 b ^= a; //b = b^a; b = 4 a ^= b; //a = a^b; a = 2; System.out.println("a="+a+" "+"b="+b); }
位非(~)
运算规则:~1=0; ~0=1;
//0 1 10 11 100 101 110 111 1000 1001 //0 1 2 3 4 5 6 7 8 9 int a = 5;//0000 0000 0000 0101 //----------------------------------- //1111 1111 1111 1010 这是-6 System.out.println(~a); //结果为 -6
右移(>>)
例如:a = a >> 3 将a的二进制位右移3位(将2转为2进制再进行位移)
2 => 10
右移两位
0010 => 0000 为0
3 => 11
右移一位
0011 => 0001 为1
无符号右移(>>>)
不管是正数还是负数左边都补0
左移(<<)
例如:a = a << 3 将a的二进制位左移3位
2 => 10
左移两位
0010 => 1000 为8
3 => 11
左移一位
0011 => 0110 为6
int mulTwo( int n){ //计算n*2 return n<<1; } int divTwoPower( int n, int m){ //计算n/(2^m) return n>>m; //除以2的m次方 } //求两个数的平均值 int getAverage( int x, int y){ return (x+y) >> 1 ; //将两个数的和右移一位 也就是除以2 }
二进制数10的十进制数为2,二进制数100的十进制数为4,以此类推,
可见十进制数的两倍这是二进制数左移了一位,
所以除以2的话就是右移1位了,如果要除以4 也就是 2*2 那就右移两位,以此类推。
相关推荐
这是 Java 基础语法的简要概述,涵盖了变量、数据类型、运算符和控制流程等基本概念。希望这个资料对您有帮助!如果您有任何其他问题,请随时提问。
JAVA编程简介,第8版第一卷-基础知识(简要版)由Y.Daniel Liang 描述本书的组织这些章节可以分为五个部分,一起构成Java编程,数据结构和算法以及数据库和Web编程的全面介绍。 由于知识是累积性的,因此前几章为...
Java语言基础3.1 Java简介3.1.1 Java概述3.1.2 Java语言特点3.1.3 Java组成与体系3.1.4 Java运行体系3.2 Java基础3.2.1 Java数据...运算符3.5 Java表达式3.5.1 算术表达式3.5.2 关系表达式3.5.3 逻辑表达式……第4章...
13.4.2 提供简要说明 13.4.3 编写伪码实现 13.5 编码实现和开发心态 13.5.1 开发是复杂的 13.5.2 开发过程是漫长的 13.6 小结 第14课 程序调试 14.1 程序的可调试性 14.1.1 增加注释 14.1.2 使用log 14.2...
paul是世界上最有经验的java和c++的企业培训师之一,已经讲授过100多门专业性的java和c++培训课程。他还为计算机协会波士顿分部讲授c++和java课程。他和他的父亲harvey m. deitel博士都是世界上最受欢迎的计算机科学...
在C / C ++ / Java之类的语言中,对整数变量进行自增或自减运算是标准的,可以分为前缀运算(++ i和–i)和后缀运算(i ++和i–), 每个都有细微的差异和不同的目的。 当这些语言的用户进入Python时,他们
本书译自《Teach Yourself C in 21 Days》第6版,该书的前五版都登上了畅销书排行榜,是初学者学习C语言的经典之作。本版按最新的标准(ISO/IEC:9899-1999),以循序渐进的方式介绍了C语言编程方面的知识,并提供了...
Java-uninformed-equation-searcher 给定 N 个数字集合的子集和 4 个基本算术运算(+、-、x、/)以达到目标。 例如:给定一组数字 1,2,3,4,6 和目标 53,达到目标的一种方法是: (2 + 3 + 4) ∗ 6 1 (a) 为问题定义...
并简要说明理由。 public void test(int i) { lock(this) { if (i>10) { i--; test(i); } } } 答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果...
同时是一位演讲家及Oracle ACE。 JARED STILL 从1994年就开始使用Oracle。他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了...