学习日记[2]

更新於 發佈於 閱讀時間約 4 分鐘

今天,我知道了计算机中数据的存储方式,虽然暂时还是关于数字的存储方式。

众所周知,计算机按照大类可分为数据,硬件和软件,这是基于冯诺依曼模型下现代计算机的组成。我也是按照这个顺序学习的。数据按照单类可分为五类:数字,文字,图像,音频和视频(这里的视频是指动起来的画面,不含音乐和音效的那种),现在大多都是这五类的排列组合而不是只单独的一类(当然,这里说的是大多,而不是全部),这五种排列与组合也有一个学名——多媒体。

从易到难,数字。提到数字,当然第一个想到的就是复数,也就是实数集与虚数集的合集。我们都知道复数的公式是a+bi(其中a与b是实数),也就是说,在计算机中我们可以用两个实数和一个常量i来表示虚数。那么我们只需要研究如何表示一个实数就可以了。可问题来了,一个实数的整数部分,小数部分,小数点和正负号该如何表示呢?可能我们会认为,将位分为四部分,分别代表正负号,整数,小数点和小数,可这样会产生以下问题。

第一个问题就是可表示数字的位数较少。假设正负号占一位,小数点占一位,那么可表示的数字位就少了两个,相对应的,可以表示的数字最多比占满少了四倍,这不是一个小数目。

第二个就是过于复杂。如果我们想要存储一个数字,就必须确定其正负,小数点应该在第几位,后续如果要变化其大小,就必须每次都移动小数点的位置。假设一下,我要定义一组数据,然后每一次改变都需要这样操作,实在是太麻烦了。

所以不能将实数进行一个统一的定义,得按照需求进行分类并分别定义。从需求和历史发展角度来看,我们可分为有小数部分和无小数部分,他们分别称为整数(其实我感觉应该叫定点数)和浮点数。他们名字是根据小数点是否浮动来定义的,因为整数的小数点是固定的,总是在数字的最右边,所以成为定点数或者整数。而有小数部分就需要考虑其精度,所以其小数点的位置是浮动的也就是浮点数。

我们一个一个来,整数又可以按照是否需要正负号分成两类。一个类是不需要正负号,称为无符号整数。在整数中,小数点是默认在位的最右边但是不占位。所以在无符号整数中,所有的位数都被用来表示大小。上一篇文章中提到,计算机中数据是以二进制存储的,也就是说,数字要首先转化成二进制数,然后补全位数使其适应计算机位数,最后放入一开始规划好的内存里。但我们需要注意的是,固定位数的内存所能存储的数字的大小是有上限的,假设位数是N(N是正整数),那么最大可存储的数字是(2^N-1)。如果我们要存储比其大的数字的时候,需要更大的位数。可如果我们在运算时数字超过位数最大值会发生什么呢?答案是溢出。溢出的位数不会存储在内存中,之后会丢失。计算机中只会从右到左存储相应位数的值。

第二类是需要正负号。这里有两种思路来存储,其中一种是绝对值存储。就是用最左边的位存储正负号(0表示正,1表示负),剩下的位全部用来表示数字的大小,用这种存储方式表示的最大正数是无符号整数的一半。需要注意的是,这种方式会产生两个零,以四位为例就是0000和1000。其余存储方式和无符号整数的存储方式相同。同理,这种方式也会有一个存储最大值,也会出现溢出的问题,从负数到正数称为负溢出,与之相反的过程称为正溢出。或许你没有发现,这种方式在运算时会产生很大问题。在进行四则运算时,用的是所代表的绝对值进行运算,也就会闹出 (-5)*(-5)=(-25)的笑话。所以会有下面的新的存储方式。

另外一种就是补码表示法,就是总体思想是一样的,但是原理不同。在介绍之前我们需要知道什么是反码和补码。反码顾名思义就是反过来,1100的反码就是0011。补码有两种算法,其中一种是从右到左复制位上的数字,直到复制第一个1时,随后的所有位都取反码,另外一种就是先取反码然后加1,例如1100的补码就是0100。书上说补码的存在是为了方便运算,具体真假等看到下一章节再说吧。然后之后的转换过程我们就可以看懂了。最左边位表示符号,0为正,1为负,这个前提要知道。第一步,要将数字转化为二进制数,如位数不足,便补全0。然后确定该数是正数还是负数,整数就直接存储在计算机中,如果是负数便按照其补码形式存储在计算机中。要输出数据时,我们需要按照相反的顺序还原该数。如果最左边的位数是0,便直接转化为十进制,这便是输出要数字;如果是1,那么需要先按照求其补码,之后再将补码的结果进行转化成十进制。

补码表示法是将整个范围分为非负数和负数,这样就避免了两个零的存在。

浮点数等明天再说吧,今天还是玩的太疯了,只看了这一点,一定改。

留言
avatar-img
留言分享你的想法!
avatar-img
YLAMBDA的沙龍
0會員
20內容數
这个专题是我个人的学习日记,每日会更新,内容很乱,请多见谅。
YLAMBDA的沙龍的其他內容
2023/11/10
2023/11/10
2023/11/04
2023/11/04
2023/11/01
2023/11/01
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
題目敘述 Integer to English Words 給定一個整數num 請轉換成對應的的英文數字表達(One, Two, Three, ... 那種數字表達式)
Thumbnail
題目敘述 Integer to English Words 給定一個整數num 請轉換成對應的的英文數字表達(One, Two, Three, ... 那種數字表達式)
Thumbnail
我們在上一篇簡單介紹了 int(整數)是做什麼用的,接下來要介紹常和他一起出現的好朋友 float 浮點數 跟 str 字串。 float 浮點數: 函數的式子寫做 float( ) ,浮點數就是帶有小數點的資料型別,他可以將字串或是數字轉換為有小數點的狀態。前提是字串內的字符必須是數字的格
Thumbnail
我們在上一篇簡單介紹了 int(整數)是做什麼用的,接下來要介紹常和他一起出現的好朋友 float 浮點數 跟 str 字串。 float 浮點數: 函數的式子寫做 float( ) ,浮點數就是帶有小數點的資料型別,他可以將字串或是數字轉換為有小數點的狀態。前提是字串內的字符必須是數字的格
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
題目敘述: Reverse Bits 給定一個32bit的整數,請逆序翻轉其二進位表達式,輸出翻轉過後的數字。 例如輸入是二進位1010111 逆序翻轉後是 1110101,對應的十進位數值是117 測試範例 Example 1: Input: n = 00000010100101000
Thumbnail
題目敘述: Reverse Bits 給定一個32bit的整數,請逆序翻轉其二進位表達式,輸出翻轉過後的數字。 例如輸入是二進位1010111 逆序翻轉後是 1110101,對應的十進位數值是117 測試範例 Example 1: Input: n = 00000010100101000
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News