首页 > 其他分享 >进制与位运算

进制与位运算

时间:2023-02-26 01:12:04浏览次数:37  
标签:进制 二进制 运算符 异或 八进制 十进制 运算

1. 进制简介

2. 进制转换

3. 原码、反码、补码

4. 位运算符

5. 移位运算符

6. 位运算符的作用

 

一、进制简介

进制,是指进位规则,表示逢X进一。比如,十进制逢十进一,二进制逢二进一,八进制逢八进一。

 

常见的进制:二进制、八进制、十进制、十六进制。

  • 二进制:使用【0】【1】表示每一位上的数。
  • 八进制:使用【0】【1】【2】【3】【4】【5】【6】【7】表示每一位上的数。
  • 十六进制:使用【0】【1】【2】【3】【4】【5】【6】【7】【8】【9】【A】【B】【C】【D】【E】【F】表示每一位上的数。

 

在 Java 中,数字默认是十进制,表示其他进制需要加前缀。

  • 二进制:以 0b 开头,b 大小写都可以。
  • 八进制:以 0 开头。
  • 十六进制:以 0x 开头,x 大小写都可以。

 

二、进制转换

2.1 其他进制转十进制

公式:系数 * 基数的权次幂,结果相加。

  • 系数:每一位的数字;
  • 基数:几进制就是几;
  • 权:从右向左,以0开始,逐个 +1。

 

比如,二进制 100 转为十进制:

结果 = 0 * 2 ^ 0 + 0 * 2 ^ 1 + 1 * 2 ^ 2 = 4

 

2.2 十进制转其他进制

公式:除基数倒序取余,直到商为 0

 

比如,十进制 6 转为二进制:

结果 = 110

 

2.3 二进制转八进制

从右开始,3个二进制位,是八进制的1位。

 

比如,二进制 01011001 转为八进制:

结果 = 131

 

2.4 二进制转十六进制

从右开始,4个二进制位,是十六进制的1位。

 

比如,二进制 01011001 转为十六进制:

结果 = 59

 

三、原码、反码、补码

对于有符号的数而言:

  • 二进制的最高位是符号位:0表示正数,1表示负数
  • 正数和0的原码、反码、补码都一样
  • 负数的反码 = 原码符号位不变,其他位取反
  • 负数的补码 = 反码 + 1
  • 计算机是以补码的方式运算

原码与补码快速转换方式:

  • 符号位不变,从低位向高位,第一个1和之后的不变,其余位取反

 

四、位运算符

Java中的位运算符有4个:按位与(&)、按位或(|)、按位异或(^)、按位取反(~)。

异或,相当于不进位加法。

  • 任何数异或本身结果为 0;
  • 异或符合交换律:a ^ b = b ^ a;
  • 异或符合结合律:a ^ b ^ c = a ^(b ^ c)= (a ^ b)^ c;
  • 异或 0 具有保持的特点,异或 1 具有反转的特点;
  • c = a ^ b => a = b ^ c;

 

五、移位运算符

Java中的移位运算符有3个:

左移 <<:高位溢出,低位补 0。左移 n 相当于乘 2 的 n 次方。

 

右移 >>:符号位不变,低位溢出,高位补符号位数字。右移 n 相当于除 2 的 n 次方。

 

无符号右移 >>>:符号位当数字,低位溢出,高位补 0

 

【 注意】

  1. 左移符号位也会变!
  2. 一个数左移(右移)32的倍数等于本身;
  3. 一个数左移(右移)n 位,n > 0,实际移动的位数为 n % 32;n < 0,实际移动的位数为(32 + n % 32);

【有趣】-1 >>> 1,结果为最大整数。

 

六、位运算符的作用

1. 求奇偶数:

    n & 1 == 1? 奇数:偶数

2. m * 2^n = m << n;m / (2^n) = m >> n;

3. 不用临时变量交换2个值:

    a = a ^ b;

    b = a ^ b;

    a = a ^ b;

4. x % 2^n = x & (2^n - 1);

5. 将1个数转成 >= 它本身的第一个 2 的 n 次方的方法:

    n -= 1
    n |= n >>> 1
    n |= n >>> 2
    n |= n >>> 4
    n |= n >>> 8
    n |= n >>> 16
    n += 1

标签:进制,二进制,运算符,异或,八进制,十进制,运算
From: https://www.cnblogs.com/luwei0424/p/17155606.html

相关文章

  • [SCILAB]信号与系统实验2-连续时间信号的运算
    信号与系统实验二:连续时间信号的运算环境信息:SCILAB6.1.1安装插件:ScilabsupportforVisualStudioCode(mammothb)安装工具箱:ScilabWaveletToolbox实验目的......
  • C语言关系运算符
    运算符意义==相等!=不相等>大于>=大于或等于<小于<=小于或等于 关系运算的结果:当两个值的关系符合关系运算符的预期时,关系运算的结果为......
  • #yyds干货盘点# LeetCode程序员面试金典:运算
    题目:请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。你的实现应该支持如下操......
  • C++实现分数四则运算
    #include<iostream>usingnamespacestd;//辗转相除法求最大公约数(12和18的最大公约数:6)intgcd(inta,intb){a=(a<0)?(a=-a):(a=a);b=(......
  • 运算符
    算数运算符a=1b=2c=3print(a+b)<<<3赋值运算符=单变量赋值a=1print(a+1)<<<2多变量赋值num,float,str=10,10.5,"hc"print(num,float,str)<......
  • 第三章 计算机进行小数运算时出错的原因
    第三章观后感想:      计算机之所以会出现运算错误的原因是因为有一些十进制数的小数无法转换成二进制数,计算机是个功能有限的机器设备,无法处理无限循环的小数......
  • 第二章 数据是用二进制数表示的
    第二章观后感想:     第二章主要讲解了二进制数、移位运算、逻辑运算。     计算机内部是由IC这种电子部件构成的,IC的一个引脚,只能表示两个状态。IC的......
  • 运算符重载
    运算符重载分为两种形式,一种是成员函数重载,一种是全局函数重载。+重载采用成员和全局重载的方法是相同的结果的,但是请注意全局重载有两个参数第一个参数是加号左边......
  • stata运算符
    RelationalArithmeticLogical(numericandstring)-------------......
  • SQL server 的除法运算
     select300/(301)*100查询结果:0,由于数值是INT类型,无法得到小数点的结果。怎么整?分母加0.0select300/(301+0.0)*100查询结果:99.667700......