chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

計(jì)算機(jī)系統(tǒng)對(duì)數(shù)值類(lèi)型的編碼、運(yùn)算、轉(zhuǎn)換原理介紹2

jf_78858299 ? 來(lái)源:元閏子的邀請(qǐng) ? 作者:元閏子 ? 2023-05-09 16:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

算術(shù)運(yùn)算

整數(shù)的算術(shù)運(yùn)算也不總符合我們的常識(shí),比如下面這個(gè)例子:

// Java語(yǔ)言
public static void main(String[] args) {
    int i1 = 2147483647;
    int i2 = 1;
    System.out.printf("2147483647+1=%d\\n", i1+i2);
}
// 輸出結(jié)果:
2147483647+1=-2147483648

兩個(gè)正數(shù) 21474836471 相加,實(shí)際運(yùn)行結(jié)果卻是一個(gè)負(fù)數(shù) -2147483648。原因是,運(yùn)算結(jié)果超出了 int 類(lèi)型的表示范圍,我們把這種現(xiàn)象稱(chēng)作 溢出 。

接下來(lái),我們將介紹整數(shù)類(lèi)型常見(jiàn)的幾種算術(shù)運(yùn)算,包括當(dāng)運(yùn)算出現(xiàn)溢出時(shí),計(jì)算機(jī)系統(tǒng)的處理方式。

加法

(1)無(wú)符號(hào)整數(shù)加法運(yùn)算

對(duì)兩個(gè) w 位的無(wú)符號(hào)整數(shù) ,有 ;如果仍用一個(gè) w 位的整數(shù)表示相加結(jié)果,那么當(dāng)結(jié)果在 范圍時(shí),也即結(jié)果需要 w + 1 位表示時(shí),運(yùn)算就產(chǎn)生溢出了。

如果出現(xiàn)溢出,系統(tǒng)會(huì)對(duì)結(jié)果進(jìn)行截?cái)?,只保留?w 位 。

比如,w = 4 場(chǎng)景下的一些例子:

圖片

因此,如果用 表示 w 位無(wú)符號(hào)整數(shù)的加法運(yùn)算,那么它有如下規(guī)則:

其中,溢出場(chǎng)景因?yàn)閷?duì)結(jié)果的進(jìn)行截?cái)?,舍去? 位,所以結(jié)果需要減去 。

(2)有符號(hào)整數(shù)加法運(yùn)算

對(duì)兩個(gè) w 位的有符號(hào)整數(shù) ,有 ;如果仍用一個(gè) w 位的整數(shù)表示相加結(jié)果,那么當(dāng)結(jié)果在 和 范圍時(shí),運(yùn)算就產(chǎn)生溢出了。

比如,w = 4 場(chǎng)景下的一些例子:

圖片

由上述例子可知, 兩個(gè) w 位的負(fù)數(shù)相加,即使結(jié)果需要 w + 1 位表示,也可能是正常場(chǎng)景。這取決于截?cái)辔?w 位后的最高位,為 1 則還屬于正常場(chǎng)景,為 0 則屬于溢出場(chǎng)景 。

因此,如果用 表示 w 位有符號(hào)整數(shù)的加法運(yùn)算,那么它有如下規(guī)則:

  • 正溢出場(chǎng)景下 ,原本 ,但按照補(bǔ)碼編碼方式,實(shí)際變成了 ,所以就有 。
  • 負(fù)溢出場(chǎng)景下 ,w 位一定是 0,原本 ,結(jié)果截?cái)嘀?,?shí)際變成了 ,所以就有 。

為什么負(fù)溢出場(chǎng)景下,w 位一定是 0

負(fù)溢出場(chǎng)景出現(xiàn)的條件是 ,也即 :

如果要使上述不等式成立, 必然為 0.

前面很多公式,但記住這個(gè)就行, 無(wú)符號(hào)整數(shù)和有符號(hào)整數(shù)的加法運(yùn)算規(guī)則,本質(zhì)都是一樣的,可以拆解成 4 步

  1. 先計(jì)算出真實(shí)加法運(yùn)算的結(jié)果值。
  2. 對(duì)結(jié)果值用 w + 1 位二進(jìn)制表示。
  3. 再將 w + 1 位的二進(jìn)制結(jié)果截?cái)?,保留?w 位。
  4. 將截?cái)嗪蟮?w 位二進(jìn)制值轉(zhuǎn)換回十進(jìn)制整數(shù),得到最終結(jié)果。無(wú)符號(hào)整數(shù)用無(wú)符號(hào)編碼,有符號(hào)整數(shù)用補(bǔ)碼編碼。

取反

取反,也即求相反數(shù),給定一個(gè)整數(shù) ,那么它的相反數(shù) ,也即滿(mǎn)足 。

(1)無(wú)符號(hào)整數(shù)的取反

對(duì)一個(gè) w 位的無(wú)符號(hào)整數(shù) ,對(duì)它取反,也即找到一個(gè)整數(shù) ,使得 :

  • 當(dāng) ,那么很容易得出 ;
  • 當(dāng) x > 0,只有在溢出場(chǎng)景才會(huì)存在 的可能。由前文可知,無(wú)符號(hào)整數(shù)加法溢出場(chǎng)景下, 時(shí),有,。

因此,如果用 表示 w 位無(wú)符號(hào)整數(shù)的取反運(yùn)算,那么它有如下規(guī)則:

比如,w = 8 場(chǎng)景下的例子:

// C++
int main() {
    uint8_t i1 = 0;
    uint8_t i2 = -i1;
    printf("i1=%u\\n", i1);
    printf("-i1=%u\\n", i2);

    uint8_t i3 = 100;
    uint8_t i4 = -i3;
    printf("i3=%u\\n", i3);
    printf("-i3=%u\\n", i4);
    printf("2^8-i3=256-%u=%u\\n", i3, 256-i3);
    return 0;
}
// 輸出結(jié)果
i1=0
-i1=0
i3=100
-i3=156
2^8-i3=256-100=156

(2)有符號(hào)整數(shù)的取反

對(duì)一個(gè) w 位的有符號(hào)整數(shù) ,對(duì)它取反,也即找到一個(gè)整數(shù) ,使得 :

  • 當(dāng) ,很容易得出 ,因?yàn)榇藭r(shí) ,仍是有效的范圍。
  • 當(dāng) ,因?yàn)? 已經(jīng)不再有效范圍內(nèi),所以只能是溢出場(chǎng)景。而 ,截?cái)酁?w 之后,剛好為 0。所以,此時(shí) 。

因此,如果用 表示 w 位有符號(hào)整數(shù)的取反運(yùn)算,那么它有如下規(guī)則:

比如,w = 8 場(chǎng)景下的例子:

// C++
int main() {
    int8_t i1 = -128;
    int8_t i2 = -i1;
    printf("i1=%d\\n", i1);
    printf("-i1=%d\\n", i2);

    int8_t i3 = 100;
    int8_t i4 = -i3;
    printf("i3=%d\\n", i3);
    printf("-i3=%d\\n", i4);
    return 0;
}
// 輸出結(jié)果
i1=-128
-i1=-128
i3=100
-i3=-100

乘法

前面介紹加法時(shí)說(shuō)過(guò),無(wú)符號(hào)整數(shù)和有符號(hào)整數(shù)的加法運(yùn)算都可以拆成 4 步,這對(duì)乘法運(yùn)算也適用。

對(duì)于無(wú)符號(hào)整數(shù) ,那么 ,即無(wú)符號(hào)整數(shù)的乘法運(yùn)算結(jié)果最多需要 2w 位來(lái)表示。

比如,w = 8 時(shí),無(wú)符號(hào)整數(shù)的例子:

// C++
int main() {
    uint8_t i1 = 100;
    uint8_t i2 = 2;
    uint8_t i3 = i1 * i2;
    printf("normal: i1 * i2 = %d * %d = %d\\n", i1, i2, i3);

    uint8_t i4 = 100;
    uint8_t i5 = 3;
    uint8_t i6 = i4 * i5;
    printf("overflow: i4 * i5 = %d * %d = %d\\n", i4, i5, i6);
    return 0;
}
// 輸出結(jié)果
normal: i1 * i2 = 100 * 2 = 200
overflow: i4 * i5 = 100 * 3 = 44

圖片

對(duì)于有符號(hào)整數(shù) ,那么 ,即有符號(hào)整數(shù)的乘法運(yùn)算結(jié)果最多也需要 2w 位來(lái)表示。

比如,w = 8 時(shí),有符號(hào)整數(shù)的例子:

// C++
int main() {
    int8_t i1 = -50;
    int8_t i2 = 2;
    int8_t i3 = i1 * i2;
    printf("normal: i1 * i2 = %d * %d = %d\\n", i1, i2, i3);

    int8_t i4 = -128;
    int8_t i5 = 127;
    int8_t i6 = i4 * i5;
    printf("overflow: i4 * i5 = %d * %d = %d\\n", i4, i5, i6);
    return 0;
}
// 輸出結(jié)果
normal: i1 * i2 = -50 * 2 = -100
overflow: i4 * i5 = -128 * 127 = -128

圖片

大部分機(jī)器上,乘法運(yùn)算消耗 3 ~ 10 個(gè) CPU 時(shí)鐘周期,而加法運(yùn)算和位運(yùn)算只消耗 1 個(gè)時(shí)鐘周期,所以,追求極致性能的程序都會(huì)想辦法通過(guò)加法運(yùn)算和位運(yùn)算來(lái)替代乘法運(yùn)算。

如果不考慮截?cái)?,?duì) 左移 k 位,會(huì)得到:

也即,對(duì) 左移 k 位 相當(dāng)于乘以

如果考慮截?cái)啵蜁?huì)存在溢出場(chǎng)景,對(duì)于 w 位的整數(shù),左移 k 位效果也等同于 或 。

比如,w = 8 時(shí),無(wú)符號(hào)整數(shù)的例子:

// C++
int main() {
    uint8_t i1 = 100;
    uint8_t i2 = 4;
    uint8_t i3 = i1 * i2;
    printf("i1 * i2 = %d * %d = %d\\n", i1, i2, i3);

    uint8_t k = 2;
    uint8_t i4 = i1 << k;
    printf("i1 << k = %d << %d = %d\\n", i1, k, i4);
    return 0;
}
// 輸出結(jié)果
i1 * i2 = 100 * 4 = 144
i1 << k = 100 << 2 = 144

有符號(hào)整數(shù)的例子:

// C++
int main() {
    int8_t i1 = -50;
    int8_t i2 = 4;
    int8_t i3 = i1 * i2;
    printf("i1 * i2 = %d * %d = %d\\n", i1, i2, i3);

    int8_t k = 2;
    int8_t i4 = i1 << k;
    printf("i1 << k = %d << %d = %d\\n", i1, k, i4);
    return 0;
}
// 輸出結(jié)果
i1 * i2 = -50 * 4 = 56
i1 << k = -50 << 2 = 56

那么,對(duì)于與任意常數(shù) K 的相乘,有沒(méi)可能轉(zhuǎn)換為移位操作

任意常數(shù) K,可以表示成 的形式,也即,由一系列連續(xù)的 0 和 連續(xù)的 1 組成,比如 14 可以表示成 。

假設(shè)只存在一個(gè)連續(xù)的 1 序列,從高到低, 位于 n 到 m 位,比如 14 中,n = 3,m = 1,那么:

比如, 就可以表示成 或者 :

// C++
int main() {
    int8_t x = 5;
    int8_t K = 14;
    printf("x * 14 = %d\\n", x*K);
    printf("(x<<3) + (x<<2) + (x<<1) = %d\\n", (x<<3)+(x<<2)+(x<<1));
    printf("(x<<4) - (x<<1) = %d\\n", (x<<4)-(x<<1));
    return 0;
}
// 輸出結(jié)果
x * 14 = 70
(x<<3) + (x<<2) + (x<<1) = 70
(x<<4) - (x<<1) = 70

同理,當(dāng) K 的二進(jìn)制表示,存在多個(gè)連續(xù)的 1 序列時(shí),也成立。

除法

除法運(yùn)算比乘法運(yùn)算更慢,通常需要 30 個(gè) CPU 時(shí)鐘以上 。同理, 也可以轉(zhuǎn)換成右移運(yùn)算,注意結(jié)果的取整:

// C++
int main() {
    int8_t x = -50;
    int8_t K = 4;
    printf("x / 4 = %d\\n", x/K);
    printf("x >> 2 = %d\\n", x>>2);
    printf("(x+(1<<2))>>2 = %d\\n", (x+(1<<2))>>2);

    uint8_t y = 50;
    uint8_t Z = 4;
    printf("y / 4 = %d\\n", y/Z);
    printf("y >>> 2 = %d\\n", y>>2);
    printf("(y+(1<<2))>>>2 = %d\\n", (y+(1<<2))>>2);
    return 0;
}
// 輸出結(jié)果
x / 4 = -12
x >> 2 = -13
(x+(1<<2))>>2 = -12

y / 4 = 12
y >>> 2 = 12
(y+(1<<2))>>>2 = 13
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7662

    瀏覽量

    90782
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95245
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    969

    瀏覽量

    55767
  • 數(shù)值
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    14582
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)

    計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)
    發(fā)表于 05-09 19:03

    什么是計(jì)算機(jī)系統(tǒng)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件?

    第一章 計(jì)算機(jī)系統(tǒng)概論1. 什么是計(jì)算機(jī)系統(tǒng)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件?硬件和軟件哪個(gè)更重要?解:P3計(jì)算機(jī)系統(tǒng):由
    發(fā)表于 07-22 09:06

    什么是計(jì)算機(jī)系統(tǒng)?硬件和軟件哪個(gè)更重要?

    第一章計(jì)算機(jī)系統(tǒng)概論1 .什么是計(jì)算機(jī)系統(tǒng)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件?硬件和軟件哪個(gè)更重要?解: P3計(jì)算機(jī)系統(tǒng):由
    發(fā)表于 07-26 07:18

    計(jì)算機(jī)系統(tǒng)中的軟件系統(tǒng)

    專(zhuān)用計(jì)算機(jī)現(xiàn)代計(jì)算機(jī)運(yùn)算速度最高可達(dá)每秒幾萬(wàn)億次幾十億次幾億次幾萬(wàn)次計(jì)算機(jī)輔助制造是計(jì)算機(jī)應(yīng)用領(lǐng)域之一其英文縮寫(xiě)是所謂的信息是指基本素材非數(shù)值
    發(fā)表于 09-13 07:22

    嵌入式計(jì)算機(jī)系統(tǒng)概述

    硬件子系統(tǒng)和軟件子系統(tǒng)組成的,通過(guò)運(yùn)行程序來(lái)協(xié)同工作計(jì)算機(jī)硬件:基本的計(jì)算機(jī)硬件系統(tǒng)運(yùn)算器、控
    發(fā)表于 12-22 06:08

    簡(jiǎn)單介紹微型計(jì)算機(jī)的組成

    你了解自己的計(jì)算機(jī)?或者知道單片機(jī)的組成嗎?這一小節(jié)主要簡(jiǎn)單介紹微型計(jì)算機(jī)的組成,以及微型計(jì)算機(jī)系統(tǒng)經(jīng)常用到的概念,包括組成、工作過(guò)程、工作原理、數(shù)
    發(fā)表于 01-10 07:11

    計(jì)算機(jī)系統(tǒng)概論

    1.1 計(jì)算機(jī)系統(tǒng)簡(jiǎn)介1.2 計(jì)算機(jī)的基本組成1.3 計(jì)算機(jī)硬件的主要技術(shù)指標(biāo)1.4 本書(shū)結(jié)構(gòu)
    發(fā)表于 04-11 09:31 ?0次下載

    微型計(jì)算機(jī)系統(tǒng)

             微型計(jì)算機(jī)系統(tǒng)與傳統(tǒng)的計(jì)算機(jī)系統(tǒng)一樣,也是由硬件系統(tǒng)和軟件系統(tǒng)兩大部分組成的。2.1
    發(fā)表于 03-03 08:31 ?0次下載

    什么是計(jì)算機(jī)系統(tǒng)的容錯(cuò)性

    什么是計(jì)算機(jī)系統(tǒng)的容錯(cuò)性             所謂容錯(cuò)是指在故障存在的情況下計(jì)算機(jī)系統(tǒng)不失效,仍然能夠正常工作的特性
    發(fā)表于 01-08 13:49 ?1718次閱讀

    深入理解計(jì)算機(jī)系統(tǒng)數(shù)值類(lèi)型

    計(jì)算機(jī)系統(tǒng)中,整數(shù)可以分成 無(wú)符號(hào)(unsigned)整數(shù) 和 有符號(hào)(signed)整數(shù) 兩大類(lèi),這之下,按照類(lèi)型表示的 bit 位大小,又可細(xì)分成 8 位的 char/byte/int8
    的頭像 發(fā)表于 08-19 15:17 ?1572次閱讀

    計(jì)算機(jī)系統(tǒng)對(duì)數(shù)值類(lèi)型編碼、運(yùn)算轉(zhuǎn)換原理介紹1

    。正因太熟悉,我們往往不會(huì)深究它們的底層原理。因?yàn)槠綍r(shí)的工作中,知道個(gè)大概,也夠用了。 但,在某些業(yè)務(wù)場(chǎng)景下,比如金融業(yè)務(wù),數(shù)值運(yùn)算不準(zhǔn)確會(huì)帶來(lái)災(zāi)難性的后果。這時(shí),你就必須清楚數(shù)值類(lèi)型
    的頭像 發(fā)表于 05-09 16:30 ?1385次閱讀
    <b class='flag-5'>計(jì)算機(jī)系統(tǒng)</b><b class='flag-5'>對(duì)數(shù)值</b><b class='flag-5'>類(lèi)型</b>的<b class='flag-5'>編碼</b>、<b class='flag-5'>運(yùn)算</b>、<b class='flag-5'>轉(zhuǎn)換</b>原理<b class='flag-5'>介紹</b>1

    計(jì)算機(jī)系統(tǒng)對(duì)數(shù)值類(lèi)型編碼運(yùn)算轉(zhuǎn)換原理介紹3

    。正因太熟悉,我們往往不會(huì)深究它們的底層原理。因?yàn)槠綍r(shí)的工作中,知道個(gè)大概,也夠用了。 但,在某些業(yè)務(wù)場(chǎng)景下,比如金融業(yè)務(wù),數(shù)值運(yùn)算不準(zhǔn)確會(huì)帶來(lái)災(zāi)難性的后果。這時(shí),你就必須清楚數(shù)值類(lèi)型
    的頭像 發(fā)表于 05-09 16:31 ?1069次閱讀
    <b class='flag-5'>計(jì)算機(jī)系統(tǒng)</b><b class='flag-5'>對(duì)數(shù)值</b><b class='flag-5'>類(lèi)型</b>的<b class='flag-5'>編碼</b>、<b class='flag-5'>運(yùn)算</b>、<b class='flag-5'>轉(zhuǎn)換</b>原理<b class='flag-5'>介紹</b>3

    計(jì)算機(jī)系統(tǒng)對(duì)數(shù)值類(lèi)型編碼運(yùn)算、轉(zhuǎn)換原理介紹4

    。正因太熟悉,我們往往不會(huì)深究它們的底層原理。因?yàn)槠綍r(shí)的工作中,知道個(gè)大概,也夠用了。 但,在某些業(yè)務(wù)場(chǎng)景下,比如金融業(yè)務(wù),數(shù)值運(yùn)算不準(zhǔn)確會(huì)帶來(lái)災(zāi)難性的后果。這時(shí),你就必須清楚數(shù)值類(lèi)型
    的頭像 發(fā)表于 05-09 16:31 ?704次閱讀
    <b class='flag-5'>計(jì)算機(jī)系統(tǒng)</b><b class='flag-5'>對(duì)數(shù)值</b><b class='flag-5'>類(lèi)型</b>的<b class='flag-5'>編碼</b>、<b class='flag-5'>運(yùn)算</b>、<b class='flag-5'>轉(zhuǎn)換</b>原理<b class='flag-5'>介紹</b>4

    計(jì)算機(jī)系統(tǒng)中的關(guān)鍵組件有哪些

    計(jì)算機(jī)系統(tǒng)中,關(guān)鍵組件的協(xié)同工作構(gòu)成了其強(qiáng)大的數(shù)據(jù)處理和運(yùn)算能力。這些組件不僅決定了計(jì)算機(jī)的性能,還影響著用戶(hù)的使用體驗(yàn)。以下是對(duì)計(jì)算機(jī)系統(tǒng)中關(guān)鍵組件的詳細(xì)闡述,包括它們的定義、功能
    的頭像 發(fā)表于 07-15 18:18 ?2560次閱讀

    微處理器如何控制計(jì)算機(jī)系統(tǒng)

    微處理器,作為計(jì)算機(jī)系統(tǒng)的核心部件,承擔(dān)著控制整個(gè)計(jì)算機(jī)系統(tǒng)運(yùn)行的重要任務(wù)。它不僅是計(jì)算機(jī)運(yùn)算中心,還是控制中心,負(fù)責(zé)執(zhí)行程序指令、處理數(shù)據(jù)以及協(xié)調(diào)
    的頭像 發(fā)表于 08-22 14:21 ?980次閱讀