首页 > 其他分享 >[CSP J/S第一轮知识] 计算机中的进制

[CSP J/S第一轮知识] 计算机中的进制

时间:2024-10-29 18:19:53浏览次数:5  
标签:第一轮 进制 16 二进制 十进制 times ... CSP 10

二进制

二进制是一种数值表示系统,使用两个数码 01 表示数,现代的二进制记数系统是由戈特弗里德·莱布尼茨于 1679 1679 1679 年设计的。在计算机科学中,二进制是基本的数据表示形式,因为计算机系统中使用电路来表示和处理信息,而这些电路可以处于两种状态,即开或关,与二进制相对应。

运算规则可以类比十进制,十进制是 逢十进一;二进制是 逢二进一

二进制的一些基本概念

  1. 位(Bit):二进制的最小单位,一个位可以是一个 01

  2. 字节(Byte):通常由 8 8 8 个二进制位组成,可用于表示一个字符或较小的整数。

例如:二进制数 1000100010001000 共有 16 16 16 个二进制位, 2 2 2 个字节。

在这里插入图片描述

二进制的四则运算

  • 加法:

    0 + 0 = 0 , 0 + 1 = 1 , 1 + 0 = 1 , 1 + 1 = 10 0+0=0 , 0+1=1 , 1+0=1 , 1+1=10 0+0=0,0+1=1,1+0=1,1+1=10,逢二进一。

  • 减法:

    0 − 0 = 0 , 1 − 0 = 1 , 1 − 1 = 0 , 10 − 1 = 1 0-0=0 , 1-0=1 , 1-1=0 , 10-1=1 0−0=0,1−0=1,1−1=0,10−1=1,向高位借一当二。

  • 乘法:

    0 × 0 = 0 , 0 × 1 = 0 , 1 × 0 = 0 , 1 × 1 = 1 0 \times 0=0 , 0 \times 1=0 , 1 \times 0=0 , 1 \times 1 = 1 0×0=0,0×1=0,1×0=0,1×1=1。

  • 除法:

    0 ÷ 1 = 0 , 1 ÷ 1 = 1 0 \div 1=0 , 1 \div 1 = 1 0÷1=0,1÷1=1。

例如:二进制数 101011 相加,结果为 1101

二进制与十进制相互转换

虽然两种进制不同,但本质都是用来表示数值,所以我们通过一定的规则将两种进制进行转换。为表示方便,下文我们用 ( ) 2 ()_2 ()2​ 来表示二进制数,用 ( ) 10 ()_{10} ()10​ 来表示十进制数。

二进制转十进制

我们定义一个概念叫位权,就是每一位上的权值,拿 ( 123.45 ) 10 (123.45)_{10} (123.45)10​ 举例说明:

百位的权值为 1 0 2 10^2 102,十位的权值为 1 0 1 10^1 101,个位的权值为 1 0 0 10^0 100,小数点后一位权值为 1 0 − 1 10^{-1} 10−1,小数点后两位的权值为 1 0 − 2 10^-2 10−2。

在这里插入图片描述

一个显而易见的结果, ( 123.45 ) 10 (123.45)_{10} (123.45)10​ 实际上是由

123.45 = 1 × 1 0 2 + 2 × 1 0 1 + 3 × 1 0 0 + 4 × 1 0 − 1 + 5 × 1 0 − 2 123.45 = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0 + \\ 4 \times 10^{-1} + 5 \times 10^{-2} 123.45=1×102+2×101+3×100+4×10−1+5×10−2

得到的,那么一个二进制数 ( 1101.101 ) 2 (1101.101)_2 (1101.101)2​ 来说,它每一位的位权如下图:

在这里插入图片描述

所以, ( 1101.101 ) 2 (1101.101)_2 (1101.101)2​ 对应的十进制数为:

1 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 = 13.625 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 \\ + 1 \times 2^0 + 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 13.625 1×23+1×22+0×21+1×20+1×2−1+0×2−2+1×2−3=13.625

总结一下,二进制转为十进制,只需将二进制每一位上的数字乘以该位的位权而后相加即可。

十进制转二进制

分为整数部分和小数部分。

整数部分,不断把十进制数整数部分除以 2 2 2 直至商为 0 0 0,余数从下往上读,就是相应二进制整数部分数字。

小数部分,不断把十进制小数部分乘以 2 2 2,每次取其整数部分的结果,直至算到小数部分全为 0 0 0 为止,从上到下读取所有整数部分的数字。

例如, ( 59.25 ) 10 (59.25)_{10} (59.25)10​ 转换成二进制,具体计算如下:

  1. 整数部分

59 ÷ 2 = 29...1 59 \div 2 = 29 ... 1 59÷2=29...1

29 ÷ 2 = 14...1 29 \div 2 = 14 ... 1 29÷2=14...1

14 ÷ 2 = 7...0 14 \div 2 = 7 ... 0 14÷2=7...0

7 ÷ 2 = 3...1 7 \div 2 = 3 ... 1 7÷2=3...1

3 ÷ 2 = 1...1 3 \div 2 = 1 ... 1 3÷2=1...1

1 ÷ 2 = 0...1 1 \div 2 = 0 ... 1 1÷2=0...1

  1. 小数部分

0.25 × 2 = 0.5...0 0.25 \times 2 = 0.5 ... 0 0.25×2=0.5...0

0.5 × 2 = 1...0 0.5 \times 2 = 1 ... 0 0.5×2=1...0

所以, ( 59.25 ) 10 = ( 111011.01 ) 2 (59.25)_{10}=(111011.01)_{2} (59.25)10​=(111011.01)2​

八进制与十六进制

计算机虽然采用二进制,但二进制书写起来冗长,并不方便人类记忆,所以在计算机中还推行了 16 16 16 进制和 8 8 8 进制,进制越大,数的表示长度也就越短。

( 100 ) 10 = ( 1100100 ) 2 = ( 144 ) 8 = ( 64 ) 16 (100)_{10}=(1100100)_{2}= (144)_{8}= (64)_{16} (100)10​=(1100100)2​=(144)8​=(64)16​

八进制

以 8 8 8 为基数的计数方法,采用 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 八个数码,逢八进一。

在 C++ 中,一个数如果要指明它采用八进制,必须在它前面加上一个 0 0 0,如: 123 123 123 是十进制,但 0123 0123 0123 则表示采用八进制。

十六进制

以 16 16 16 为基数的计数方式,有 0 − 9 , A − F 0-9 , A-F 0−9,A−F 共 16 16 16 个数码,与 10 10 10 进制的对应关系是, 0 − 9 0-9 0−9 对应 0 − 9 0-9 0−9; A − F A-F A−F 对应 10 − 15 10-15 10−15。

在 C++ 中,一个数如果要指明采用十六进制,要以 0x 开头,是数字 0 而不是字母 o,如, 0 x 1 0x1 0x1 表示一个 16 16 16 进制数,而 1 1 1 则表示一个十进制数。

二进制、八进制、十六进制互相转换

2 , 8 , 16 2,8,16 2,8,16 分别是 2 1 , 2 3 , 2 4 2^1 , 2^3 , 2^4 21,23,24,这一点使得三种进制间可以直接互相转换。

二进制与八进制互转:

每 3 3 3 个二进制位一组,进行转换,不足位补 0 0 0,如: ( 10010 ) 2 = ( 22 ) 8 (10010)_2 = (22)_8 (10010)2​=(22)8​。

二进制与十六进制互转:

每 4 4 4 个二进制位一组,进行转换,不足位补 0 0 0,如: ( 1001100 ) 2 = ( 4 C ) 16 (1001100)_{2}=(4C)_{16} (1001100)2​=(4C)16​。

总结

本文主要介绍了计算机中的二进制、八进制、十六进制,以及它们间的互相转换,如果有问题,欢迎留言探讨。

标签:第一轮,进制,16,二进制,十进制,times,...,CSP,10
From: https://blog.csdn.net/iuiujk/article/details/143265747

相关文章

  • CSP-S 2024 游记:祸兮,福之所倚;福兮,祸之所伏。
    前情提要:不会写游记,只是想写神秘的摘要。本来不想写游记的。因为一些神秘原因来写一写。day-1哎哎,怎么\(29\)号了啊,尝试进行一下回忆。记忆非常模糊啊,只不过记得昨天晚上打了CF,但是已经进行了早起,这是为什么呢?CF打的很唐,没打完D因为忘记带充电线导致电脑关机了,不过赛后......
  • CSPPPPP
    (?表示存疑,单独一个括号表示谔谔剩余3日感觉受周期影响有点大,所以直接当CSP不存在,把CSP当模拟赛打就可以打好(?不过nfls考前放三个大DS是什么意思啊,写完前两个就3h了,不过排名还不错(?下午把后两个改了,T3感觉找下规律列个GF就做完了,有时间的话肯定能切(?然后T4是巨型......
  • 【杂谈】whk 选手的 CSP-S 2024 游记
    每年前总会想一些有关早年OI的经历。从去年全机房搞颓(除了Million小朋友)被冰霜秒全场的经历,到更早一点还是普及组选手考前在背背包板子的事情,这才意识到,原来已经过去这么久了啊。即使每年考前的经历或许已然模糊,但打摆玩Minecraft的经历还依旧历历在目。于是,在大概率是我OI......
  • P11234 [CSP-S 2024] 擂台游戏
    看看了看今年的csps,前三题一眼就秒了,这最后一题想了挺久,还写了快两个小时,要是在正式赛场上估计是要暴毙了,不过好在我已经退役了,希望参赛的选手能有好的发挥题目大意太长了,不写了题解考虑每次加入一个人,然后分析变化的答案经过一些分析,可以发现一些性质1.对于完全没有确定能......
  • CSP-J 2024-T1扑克牌
    方法一:使用二维字符数组存储,利用字符串函数比较去重#include<bits/stdc++.h>usingnamespacestd;intn;chara[62][3];//注意此处第二维数组需要开3否则会出现未知错误intcnt;//用于统计去重后的个数intmain(){ //cout<<strcmp("dd","dd")<<""<<strcmp("......
  • leetcode-3211. 生成不含相邻零的二进制字符串
    leetcode-3211.生成不含相邻零的二进制字符串给你一个正整数n。如果一个二进制字符串x的所有长度为2的子字符串中包含至少一个"1",则称x是一个有效字符串。返回所有长度为n的有效字符串,可以以任意顺序排列。思路:所有长度为2的子字符串都包含1,也就是说,......
  • CSP2024游记
    CSP2024游记J组T1,T2,T3一个小时做完,T4两个半小时不会做。S组T1最开始以为是一个线段树,写完了才发现一个循环搞定,浪费一个小时。T2发现算出超速区间后就变成了一个每个区间选一个点的贪心,一个小时做完。T4看了发现不能做,开始做T3。T3先是想了一个非常接近正解的错解,本来改......
  • CSP-S 2024 复赛游记
    Day-2空白的一天。huge不想太多天连着打模拟赛,并且想在明天安排一场,所以安排了专题。今天是dp专题。听了丁真的去做AT的dp专题了,很晚才看Vjudge。效率有点低啊,这状态怎么打复赛(。Day-1全真模拟,换了座位。模拟赛有关。挂了40pts,不挂Rank1了,不过问题不大,考前挂......
  • CSP游记
    Day-1下午与同学一同去试机,结果ST与家里装的插件不同,只能用DEV了,接着看了看22年的题目,想出来了T4部分分后就走了。晚上在机房颓废,不知道干什么,就重新写了遍动态开点,挂了,调了半个小时才过。Day1上午提前20分钟进了机房,打完模板后写了个最短路板子。前面两道题都......
  • CSP-S 2024 游记
    CSP-S2024Day-2晚自习听到了Danubius的建议,有了这一篇游记。Day-1吃完晚饭后只有我一个人留在机房(其他人都请假回家了)。晚自习做了几道题。看到QQ群里没人说话,回到宿舍发现原来是都藏在微信群里了。看了下微信后就休息了。Day0早上先去机房打了两个板子,八点整的时候hxl......