無符號數 0 0 1 1 ?

2021-07-30 06:55:18 字數 2342 閱讀 6913

一:什麼是無符號數 ?

無符號數(unsigned number)是相對於有符號數而言的,指的是整個機器字長的全部二進位制位均表示數值位,相當於數的絕對值。

有符號數(signed number)和無符號數基本相同,不同的是:一般用最高有效位(msb)來表示數的符號,正數用0表示,負數用1表示。

二:為什麼有無符號數存在 ?

1 . 無符號數這個概念是程式語言所特有的資料型別,它我們是現實生活中遇到的各種形形色色的資料的對映,有些場合出現的數字不可能小於零,因此無符號數便應運而生,很好地實現了現實資料到計算機資料的抽象,提供了計算機處理輸入資料的手段。

2 . 無符號數是建立在有符號數的概念之上的 。 表示資料大小的範圍是有符號數的兩倍,有更強大的表示張力。

三:無符號數如何使用 ?

1 . 表示方法:unsigned int i = 666 ;

2 . 表示範圍:對於int ( 若是 16 bit )型別的變數而言,i 的範圍是 0 ——> 65535 。

3 . 資料之間的聯絡:

無符號資料——無符號資料:正常運算,結果為無符號資料。

無符號資料——有符號資料:型別提公升,因為無符號數級別大於有符號數級別,因此有符號數會型別提公升為無符號數,可能會出現很奇葩的結果,但這取決於你如何解釋它,什麼意思?

有符號數 + 無符號數

#include 

int main(void)

結果:

4294967290

-6

(ui+i) > 0 is true

(ui+i) > (unsigned short int)0 is true

四 : 無符號數 0 - 1 是什麼 ?

c ++ 實現

#include 

using

namespace

std;

int main(void)

結果:

i = 65535 p = 16

為什麼 ?

1 .16位的範圍是:(無符號)0——>65535 (65536個數字 2^16=65536) ;

2 .sizeof(short) =2 (16 bits) , unsigned short int a = 0 ;

3 .0000_0000_0000_0000 減 1 就變成 (1111_1111_1111_1111) (無符號數表示為65535) ;

總結以下:

1 . 總之,不管怎麼樣,無符號和有符號一起運算,有符號會型別提公升,運算正常運算。

2 . 其實,對於結果是什麼,取決於我們如何去解析結果,是有符號還是無符號 才是重點。

3 . 比如:int a = -1 ; printf("%u\n",a);結果不是 -1 。

int main(void)

結果:

4294967290

-1

有符號數與無符號數

關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...

有符號數和無符號數

有符號和無符號整數 1.通常情況下,大多數字預設的是有符號數,比如 4,5 要想寫乙個無符號數必須在後面加u 比如 4u,5u 2.在計算機中有符號數是用補碼的形式來表示的,最高位是符號位。無符號數就是正數唄 正數的補碼和原碼相同。比如 1 在計算機中表示為 11111111 11111111 11...

無符號數和有符號數

人有十個手指頭,習慣了逢十進一,於是十進位製成了生活中的標準。程式的世界只有高低電平兩種狀態,更適合用二進位制來表示,於是二進位製成了程式世界的標準。對與無符號數來說,我們更喜歡談他們之間的轉化,十進位制是我們最習慣的進製,於是十進位制轉為r進製,r進製轉為十進位制變尤為重要。十進位制 r進製 整數...