算法题每日一练---第45天:位运算

简介: 阅读本篇文章你将掌握掌握 原码 反码 补码 基本运算以及转换、与 或 非 同或 异或 应用、移位运算

4.png

一、前言


学习目标:

  • 掌握 原码 反码 补码 基本运算以及转换
  • 熟练应用 与 或 非 同或 异或 应用
  • 对于 移位运算 在题目中熟练应用,后面会出位运算的题目


二、概述


计算机最主要的功能是处理数值、文字、声音、图形图像等信息。

在计算机内部,各种信息都必须经过数字化编码后才能被传送、存储和处理,所有的数据以二进制的形式存储在设备中,即 0、1 这两种状态。

计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,例如下面的计算:

int a=74;
int b=58;
int c=a+b;
a  74 :  1 0 0 1 0 1 0
b  58 :     1 1 1 0 1 0
c 132 : 1 0 0 0 0 1 0 0

十进制数字转换成底层的二进制数字之后,二进制逐位相加,满2进1。


三、原码 反码 补码


1.原码

在计算机的运算中,计算机只能做加法,减法、乘除都没法计算。原码是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。

5.png

首位的0表示正数、1表示负数。

特点

  • 表示直观易懂,正负数区分清晰
  • 加减法运算复杂,要先判断符号是正号还是负号、相同还是相反


2.反码

正数的反码还是等于原码,负数的反码就是它的原码除符号位外,按位取反。

6.png

特点

  • 反码的表示范围与原码的表示范围相同
  • 反码表示在计算机中往往作为数码变换的中间环节


3.补码

正数的补码等于它的原码,负数的补码等于反码+1

7.png

特点:

  • 在计算机运算时,都是以补码的方式运算的,下面的位运算也是补码形式计算


四、基本运算


1.与

符号:&

运算规则:两个二进制位都为1时才为1,否则为0

示例:1001&1111=1001


2.或

符号:|

运算规则:两个二进制位都为0时才为0,否则为1

示例:1001&1100=1101


3.非

符号:~

运算规则:0变成1,1变成0

示例:~1001 = 0110


4.同或

符号:~

运算规则:数字相同时为1,相反为0

示例:1001~1100=1010


5.异或

符号:^

运算规则:两个二进制位相反为1,相同为0

示例:1001^0111=1110


五、移位运算


1.左移

符号:<<

运算规则:符号位不变,低位补0

示例

a<<b代表十进制数字a向左移动b个进位/* 左移:* 左移1位,相当于原数值 * 2* 左移2位,相当于原数值 * 4* 左移n位,相当于原数值 * 2^n*/计算10<<110的补码:00001010-----------------------结果补码:00010100==>正数,即10*2=20计算10<<210的补码:00001010-----------------------结果补码:00101000==>正数,即10*2^2=40计算10<<310的补码:00001010-----------------------结果补码:01010000==>正数,即10*2^3=80计算12<<112的补码:00001100-----------------------结果补码:00011000==>正数,即12*2=24


2.右移

符号:>>

运算规则:低位溢出,符号位不变,并用符号位补溢出的高位

示例

a>>b代表十进制数字a向右移动b个进位/* 右移:* 右移1位,相当于原数值 / 2* 右移2位,相当于原数值 / 4* 右移3位,相当于原数值 / 2^n* 结果没有小数(向下取整)*/计算80>>180的补码:01010000-----------------------结果补码:00101000==>正数,即80/2=40计算80>>280的补码:01010000-----------------------结果补码:000101000==>正数,即80/2^2=20计算80>>380的补码:01010000-----------------------结果补码:00001010==>正数,即80/2^3=10计算24>>112的补码:00011000-----------------------结果补码:00001100==>正数,即24/2=12


相关文章
|
1月前
|
算法
算法思想总结:位运算
算法思想总结:位运算
|
1月前
|
机器学习/深度学习 存储 算法
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
|
8月前
|
算法
基础算法:位运算
基础算法:位运算
29 0
|
4天前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
11 1
|
4天前
|
算法 Java
Java数据结构与算法:位运算之位移操作
Java数据结构与算法:位运算之位移操作
|
4天前
|
算法 Java
Java数据结构与算法:位运算之与、或、异或运算
Java数据结构与算法:位运算之与、或、异或运算
|
1月前
|
存储 算法 C++
算法:位运算
算法:位运算
22 2
|
1月前
|
算法 C++
c++算法学习笔记 (10) 位运算
c++算法学习笔记 (10) 位运算
|
1月前
|
存储 机器学习/深度学习 人工智能
【算法基础】基础算法(三)--(双指针算法、位运算、离散化、区间合并)
【算法基础】基础算法(三)--(双指针算法、位运算、离散化、区间合并)
|
1月前
|
算法 测试技术 C++
【位运算】【二分查找】【C++算法】100160价值和小于等于 K 的最大数字
【位运算】【二分查找】【C++算法】100160价值和小于等于 K 的最大数字