無符號整數和有符號整數怎麼區分,無符號數和有符號數在彙編程式裡如何區分?

2021-05-05 15:24:23 字數 5445 閱讀 6570

1樓:angela韓雪倩

有無符號的整數,在計算機記憶體中是區別不出有無符號的,而是在程式裡有區分。計算機中資料是以補碼形式存放的,用二進位制表示。比如:

預設無符號型,只要在型別符號加unsigned就是無符號型,int是有符號的。其實說白了就是:定義帶符號整數的,則可以儲存正負整數,定義無符號整數的,則只可以儲存正整數。

拓展資料:

計算機裡的數是用二進位制表示的,最左邊的這一位一般用來表示這個數是正數還是負數,這樣的話這個數就是有符號整數。如果最左邊這一位不用來表示正負,而是和後面的連在一起表示整數,那麼就不能區分這個數是正還是負,就只能是正數,這就是無符號整數。

計算機中的整數分為兩類:不帶符號位的整數(unsigned integer,也稱為無符號整數),此類整數一定是正整數;帶符號位的整數(signed integer),此類整數可以表示正整數,又可以表示負整數。

有符號和無符號的差別:

int是有符號的,unsigned是無符號的。

它們所佔的位元組數其實是一樣的,但是有符號的需要安排一個位置來表達我這個數值的符號,因此說它能表示的絕對值就要比無符號的少一半。舉個例子,我們有一個1個 [1]  位元組的整數(雖然這種型別不存在),那麼無符號的就是這樣:00000000~11111111 這個就是無符號的範圍。

一個位元組是8位, 有符號的數,因為第一個位要用來表示符號,那麼就只剩下7個位置可以用來表示數了0000000~1111111因為有符號,所以還可以表示範圍:-1111 111 ~ +1111 111。

2樓:

11111111 為二進位制表示 255,這不用解釋什麼。

表示負數時,就是用二的補碼錶示法。

負數的二的補碼為「本身的反碼加1」,有:

(1)1111111,符號位1表示負數

就要按上面的逆運算進行

除去符號位的七位(1111111),先減1得1111110。

求反碼,得0000001,

代入符號,得-1

另外一個例子:

10101010表示多少呢?

同上面步驟

符號位1,負數。

0101010 先減1,得0101001,求反碼,得1010110,(64+16+4+2=86)代入符號,得-86

(我本2樓)

怎麼區分,是由最終怎麼使用這個資料來決定,如果作為無符號,就是255,如果看成有符號就是-1。由人為的協議規定,在高階語言中由變數的型別來標識出。

如果看成「有符號」整型,標誌位是區分的標誌。

3樓:沙裡波特

11111111 可以看成有符號整數轉為十進位制結果為-127,也可看成無符號整數轉為十進位制結果為 255,這是咋麼回事啊?

----

計算機內部的資料,都是由 人 存放進去的。

1111 1111,究竟是多少?

誰存的,誰知道。 別人,就只能猜測了。

4樓:匿名使用者

一個位元組是8位,用8位來表示一個整數,如果是有符號的,第一位用來表示正負,0是正1是負

如果不無符號的,那第一位也可用來表示一個數位,這樣可擴大數的表示範圍有無符號,根據軟體或硬體有規定的

考試的時候會講清,或約定的

5樓:匿名使用者

有符號整數最高一位是符號位,0表示正,1表示負,所以看成是1111111,轉成十進位制就是127

無符號整數無符號位,所以是11111111,轉成十進位制就是255。

我是從「上海全鼎軟體學院」畢業的————————

無符號數和有符號數在彙編程式裡如何區分?

6樓:會飛的小兔子

在彙編程式裡是沒有無符號數和有符號數區分的。

加減運算指令是不區分有符號和無符號的,在計算機對有符號整數的表示只採取一種編碼方式,不存在正數用原碼,負數用補碼的問題。

在組合語言裡宣告變數的時候,沒有signed和unsignde之分,彙編器全部將輸入的整數字面量當作有符號數處理成補碼存入到計算機中,只有這一個標準,並且全部彙編成補碼。也就是說,db-20彙編後為:ec,而db236彙編後也為ec。

db是分配一個位元組,一個位元組能表示的有符號整數範圍是:-128~+127,那麼db236超過了這一範圍,+236的補碼的確超出了一個位元組的表示範圍,那麼拿兩個位元組是可以裝下的,應為:00ec,也就是說+236的補碼應該是00ec,一個位元組裝不下。

00ec是兩個位元組,被截斷成ec,當把236當作無符號數時,它彙編後的結果正好也是ec。

擴充套件資料無符號數和有符號數的使用

#include

#include

intmain()

7樓:仁昌居士

無符號數和有符號數在彙編程式裡區別為:識別符號不同、二進位制不同、範圍不同。

一、識別符號不同

1、無符號數:無符號數在宣告變數的時候,帶unsigned識別符號。

2、有符號數:有符號數在宣告變數的時候,帶signded識別符號。

二、二進位制不同

1、無符號數:無符號數在編譯時,轉為二進位制,所有數位用作數值位,代表數值。

2、有符號數:有符號數在編譯時,轉為二進位制,用最高位作為符號位,「0」代表「+」,「1」代表「-」 ;其餘數位用作數值位,代表數值。

三、範圍不同

1、無符號數:若機器字長為n+1位,無符號數的範圍為0~2^(n+1)。

2、有符號數:若機器字長為n+1位,有符號數的範圍為-2^n+1~2^n。

8樓:匿名使用者

在組合語言層面,宣告變數的時候,沒有 signed 和 unsignde 之分,彙編器統統,將輸入的整數字面量當作有符號數處理成補碼存入到計算機中,只有這一個標準,彙編器不會區分有符號還是無符號然後用兩個標準來處理,它統統當作有符號的,並且統統彙編成補碼。

舉例來說:

記憶體裡有 一個位元組x 為:0x ec ,一個位元組 y 為:0x 02 。

當把x,y當作有符號數來看時,x = -20 ,y = +2 。當作無符號數看時,x = 236 ,y = 2 。

下面進行加運算,用 add 指令,得到的結果為:0x ee ,那麼這個 0x ee 當作有符號數就是:-18 ,無符號數就是 238 。

所以,add 一個指令可以適用有符號和無符號兩種情況。

乘法運算就不行了,必須用兩套指令,有符號的情況下用imul 得到的結果是:0x ff d8 就是 -40 。無符號的情況下用 mul ,得到:0x 01 d8 就是 472 。

9樓:匿名使用者

加減運算指令是不區分有符號和無符號的,程式設計人員自己要心理有數。計算機對有符號整數的表示只採取一套編碼方式,不存在正數用原碼,負數用補碼這用兩套編碼之說,大多數計算機內部的有符號整數都是用補碼,就是說無論正負,這個計算機內部只用補碼來編碼!!!只不過正數和0的補碼跟他原碼在形式上相同,負數的補碼在形式上與其絕對值的原碼取反加一相同。

10樓:匿名使用者

最高位為1時負數,最高位為0是整數。10000000是-12810000001是-12711111111是-1即處理器的補碼方式:如果運算元是8位先確定二進位制00000000~01111111為十進位制0~127,然後按位取反加1即是它的負數。

補碼中每個負數取反加1而且也是它的正數。例子:二進位制00010000是十進位制的16,那麼-16就是11101111(取反)+1=11110000。

10000000是負多少呢?找取反加1:01111111+1=10000000=128,所以是-128。

有符號整型資料和無符號資料型別是什麼?

11樓:為江山放棄了愛

整型有無符號(unsigned)和有符號(signed)兩種型別,在預設情況下宣告的整型變數都是有

內符號的型別(char有點特別)容,如果需宣告無符號型別的話就需要在型別前加上unsigned。

無符號整型和有符號整型的區別就是無符號型別可以存放的正數範圍比有符號整型中的範圍大一倍,因為有符號型別將最高位儲存符號,而無符號型別全都儲存數字。

擴充套件資料

無符號數只表示大小,有符號數最高位(二進位制情況下最高位表示符號位),在同一作業系統下,有符號數和無符號數的最大數值在大小上的關係是2*x+1(x表示有符號數的最大值,2*x+1表示無符號數最大值)。二者表示的資料範圍大小是相同的,但是範圍不同。

12樓:匿名使用者

無符號數只表示bai大小,有符du號數最高位(二進

zhi制情況下最高位dao表示內符號位),在同一作業系統下,容有符號數和無符號數的最大數值在大小上的關係是2x+1(x表示有符號數的最大值,2x+1表示無符號數最大值)。二者表示的資料範圍大小是相同的,但是範圍不同。

無符號整型和有符號整型的區別就是無符號型別可以存放的正數範圍比有符號整型中的範圍大一倍,因為有符號型別將最高位儲存符號,而無符號型別全都儲存數字。

13樓:匿名使用者

整型有無符bai號(duunsigned)和有符號(signed)兩種zhi型別;

在預設情況dao下宣告的整型變數都內是容有符號的型別(char有點特別),如果需宣告無符號型別的話就需要在型別前加上unsigned。

無符號數只表示大小,有符號數最高位(二進位制情況下最高位表示符號位),在同一作業系統下,有符號數和無符號數的最大數值在大小上的關係是2x+1(x表示有符號數的最大值,2x+1表示無符號數最大值)。

二者表示的資料範圍大小是相同的,但是範圍不同。

無符號整型和有符號整型的區別就是無符號型別可以存放的正數範圍比有符號整型中的範圍大一倍,因為有符號型別將最高位儲存符號,而無符號型別全都儲存數字。

14樓:無敵黑熊貓

有符號和無符號的記憶體用量不同,有符號需要更多的記憶體來記錄正負範圍。一般開發不用區別他們,統一用一種就好了。

15樓:匿名使用者

以來int為例

int 為2個位元組

有符號整型數自

據 數的範圍 -32768~32767

01111111111111111 最左邊的一位,這裡是0表示是正數,如是1就是負數.

無符號資料型別 數的範圍 0~65535

01111111111111111 最左邊的一位,這裡是0表示是正數,如是1也是正數.

16樓:四海為家的魚

一個來int型的變

量值的範自圍為-32678~32767

有符號整型變數 [signed]int 的取值範圍為-32678~32767,它的儲存

單元中最高位代表符號(0為正,1為負)

無符號整型變數 unsigned int取值範圍為0~65535,它的儲存單元只能儲存不帶符號的整數(正整數)

整型資料在記憶體中是以二進位制形式存放。

區別:int型的儲存單元中的最高位代表的是符號unsigned int型的儲存單元中最高位代表的是該資料的第一位;

C語言有符號和無符號的有什麼不同啊

有符號數如果高位為1,則為負數的補碼。對於一個有符號整數,c編譯程式將把該值 二進位制 的最高位作為符號標誌位 符號標誌位是0,表示正數 為1,表示負數 比如說整bai型變數吧。unsigned int 是從du0到2的zhi32次方dao減1,而signed int 是專 從負2的31次方到正2的...

左移賦值有符號右移賦值無符號右移賦值分別什麼意思?請舉

有符號數和無符號數,主要是將資料轉成2進位制後,第一位的意義,有符號數第一位為符號位,1表示負數,0表示整數。無符號數第一位都是0 左移位賦值與右移位賦值有何計算規律?左移一位等於乘2,右移一位等於除2。左移2位等於乘2的2次方,右移一位等於除2的2次方。左移n位等於乘2的n次方,右移一位等於除2的...

分數和整數要化成最簡比怎麼做,整數和分數的比怎麼化成最簡比

前項和後項都乘以那個分數的分母即可 2 3 9 2 3 3 9 3 2 27 4 2 5 4 5 2 5 5 20 2 10 1 2 27 同時擴大3倍 整數和分數的比怎麼化成最簡比 假如說整數是3,分數是九分之一,分數的分母是九,那麼三變成分數的話,分母也要是九,如果分母是九,而又是三,那麼分子必...