《算法:一解通全》位运算篇——一篇通识位运算、进制、原码补码反码

本文探讨了位运算的基础,包括进制转换、计算机整数表示的原码、补码和反码,以及位运算的六种基本操作:与、或、异或、取反、左移和右移。深入介绍了这些运算在判断奇偶性、快速计算、状态压缩等场景的巧妙应用,是理解和提升编程效率的必备知识。
摘要由CSDN通过智能技术生成

在这里插入图片描述

前言:位运算是很奇巧的操作,往往可以对某些特殊问题达到意想不到的奇效

【位运算基础】:⋘一.进制🔑

1.进制的基本概念
进制即进位计数制,是利用固定的数学符号和统一的规则的带进位的计数方法。
任何一种进制都有一个基数,基数为X的进制称为X进制,表示每个数位上的数运算时都是逢X进一。
对于一个X进制的数,其具体数值由其中的每个数码和数码所在的数位决定。
整数部分从右往左(第一个数位记为1,增 )的第m个数位具有的权重为X^(m-1)
如:十进制整数1234

1234=1×10^3+2×10^2+3×10^1+4×10^0
小数部分从左到右(**第一个数位记为-1,减**)的第n个数位具有的权重为**X^(-n)** 如:十进制小数0.5678
0.5678=5×10^-1+5×10^-2+6×10^-3+8×10^-4
结合起来: 如八进制的 720.514 可以写成如下形式

720.514=7×8^2 + 2×8^1 +0×8^0 +4×8^-1+ 0×8^-2+ 7×8^-3……

2.进制转化的基本方法
非十进制转十进制
——
将非十进制数转成十进制数,只要将每个数位的数乘以该数位的权重,最后相加即可(每个数位的加权和)。
十进制转非十进制
——
将十进制数转成 X进制数,需要对整数部分和小数部分分别转换。
整数:连除取余,直到0
例如,将十进制数 50 转成二进制:

50÷2=250
25÷2=121
12÷2=60
6÷2=30
3÷2=11
1÷2=01
反向遍历每次的余数,依次是 1,1,0,0,1,0
因此十进制数 5050 转成二进制数是110010 (2)

小数:连乘取整,直到1
例如,将十进制数 0.6875 转成二进制:

0.6875×2=1.3751
  0.375×2=0.750
    0.75×2=1.51
       0.5×2=11
正序遍历每次的整数部分,依次是 1,0,1,1
,因此十进制数 0.6875 转成二进制数是0.1011(2)

注意:需要注意的是,在一种进制下的有限小数,转成另一种进制之后可能变成无限循环小数,例如上面的【 720.514 转八进制】
非十进制转非十进制
——
如果需要在两个不同的非十进制之间转换,常规的思路是先转成十进制数,再转成目标进制数。在一些特殊情况下,也可以不经过十进制,直接进行转换。
例如,将二进制数转成八进制数或十六进制数,以及将八进制数或十六进制数转成二进制数,都不需要经过十进制。一位八进制数可以表示成三位二进制数,一位十六进制数可以表示成四位二进制数。
如:101110010(2),按三位一组分:101|110|010,转成八进制数562(8)

⋘二.计算机中整数如何表示🔑

《1》——
计算机中整数统统用二进制表示,只有两个数码0,1
一位二进制的取值共有2个,k位二进制的取值共有2^k个

 4 字节数,即32 位二进制数,可能取值有 2^32个;
 8 字节数,即 64 位二进制数,可能取值有 2^6416 字节数,即 128 位二进制数,可能取值有 2^128

《2》——
计算机中的数据类型包括有符号类型和无符号类型,有符号类型的整数称为有符号整数,无符号类型的整数称为无符号整数。
(每个数据类型都有对应的无符号、有符号类型两种,
如:int ,unsigned int等,其字节数一致。)
区别:
——
1、有符号整数中,最高位用于表示符号,因此最高位又称符号位。当最高位是 0时表示 0 或正整数,当最高位是 1时表示负整数。除了最高位以外的数位用于表示数字的大小。
2、无符号整数中,所有的数位都用于表示数字的大小,因此无符号整数不存在负数。
以int/unsigned int,4字节数为例.4字节数包含32位二进制数。
对于4字节数的有符号数(int)
当最高位是 0 时,4字节数的取值范围是 【0~2147483647(231-1)】
当最高位是1时,4字节数的取值范围是 【-2147483648(-231) ~ - 1 】
对于4字节数的无符号数(unsigned int)
无符号位,所以其取值范围为:【0~4294967295(232-1)】
《总结》:

1.有符号整数的取值范围包括负整数、零与正整数,
无符号整数的取值范围只包括零与正整数,不包括负整数;
2.在位数相同的情况下,有符号整数可以表示的最大值比无符号整数小了一半;
3.对于二进制位为k的整数,有符号整数的取值范围是 -2^(k-1)~2^(k−1)-1
无符号整数的取值范围是 02^k .

⋘三.原码、补码和反码🔑(看看数字的底层)

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0<Solving)1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值