如圖 C語言程式中無符號數a的值是負數,為什麼作整形輸出時的結果是

2021-03-25 05:34:03 字數 5042 閱讀 2834

1樓:匿名使用者

負數在記憶體中是以補碼的形式儲存的,

即 -666

原碼:1000 0010 1001 1010

反碼:1111 1101 0110 0101 (符號位不變,其它位取反)

補碼:1111 1101 0110 0110 (反碼+1)

即,實際記憶體中的資料為0b1111 1101 0110 0110=64870

而a為unsigned short int,所以反饋的應該就是64870正數。

2樓:匿名使用者

-666 在記憶體中的是以補碼的形式存在的

-666的原碼是

1000 0010 1001 1010

補碼是 原碼除符號位(第1位)外各位取反+1,所以是1111 1101 0110 0110

由於a是無符號數,所以第一位的1不在表示負數,1111 1101 0110 0110 的十進位制數就是64870

如圖c語言程式,這個定義一個無符號數a,但是賦了一個-66666的一個負數,但是為什麼列印輸出也是負數?

3樓:不可以語冰

你好是這樣子的你是以無符號存放的沒錯

但是輸出無符號的格式是%u

%d是有符號整數輸出的格式

希望能幫助到你

4樓:金色潛鳥

%d 格式

bai 輸出, 就是把 數值du 轉換 為 有符號數 輸出zhi。

unsigned int a = -66666; 內部是dao 0xfffefb96

按 無符號內 輸出 要用 格式 %u.

===體會容一下:

unsigned long int a = -66666;

printf("format x: %x\n",a);

printf("format u: %u\n",a);

printf("format d: %d\n",0xfffefb96);

printf("format u: %u\n",0xfffefb96);

5樓:匿名使用者

%d是有符號的,應該用%u,

6樓:劉子超1號

試試printf("%u\n", a);

7樓:匿名使用者

printf("%ud\n", a);試試。

c語言無符號整形和無符號短整型顯示負數結果為什麼不一樣?

8樓:匿名使用者

因為printf裡用%d來輸出某個變數時,程式會預設該變數為int型。如果該變數

是內整型,容但不是int,而是char或者short,程式會先把它轉換成int型,再傳給printf.

所以用unsigned int a=-12時,沒有上面所說的轉換步驟,%d當成有符號整數,輸出是-12,沒問題。

unsigned short a=-12時, 注意這時候a是16位,在記憶體中是11111111 11110100,轉換成int型會變成32位,程式在它的左邊會新增16個0,變成00000000 00000000 11111111 11110100,這時候符號位是0了,當然變成正數了。

9樓:匿名使用者

顧名思義,無bai符號是du沒有符號的,只能zhi

儲存非負數。所以顯dao示結果是不一版樣的。

在計算權機內部,負數與非負數沒有區分,只是負數用補碼形式儲存,補碼是原碼按位取反再加1得到的。對於負數來說首位一定是1,假如作為正數,將是一個很大的數,也就變成了另一個數了。

10樓:匿名使用者

無符號整型和無符號短整型所佔的位元組數是不一樣的

11樓:匿名使用者

你把它寫成2進位制就知道了!

關於在c語言中無符號整形儲存負數問題

12樓:匿名使用者

你的理解是對的。

最高位為1時,對於有符號來說,這個數是負數,而對於無符號數而言,由於最高位也是有效儲存位,所以可以儲存更大範圍的數。

話再說回來,既然是無符號數,輸出格式應該是"%u",而不是"%d",這樣才能做到「表裡如一」,「改頭換面」只會亂了自己,這不是遊戲,嚴謹是必須的。

無符號整型,為什麼輸出這樣的結果?

13樓:匿名使用者

%d是輸出有符號的整數.輸出無符號整數用%u.

int的大小是看計算機位數和編譯器的.16位的unsigned int最大是65535,不過現在大部分是32位編譯器和計算機,unsigned int最大就是2的32次方減1,4294967295.

14樓:匿名使用者

誰告訴你int資料在任何計算機上都是16位?你可以指著他罵了.

int的位數跟編譯器有關係,比如tc上是16位,但是vc上是32位.

15樓:匿名使用者

65535是16位的,

現在一般計算機,在vc上都是32位的,數值遠比這個大。無符號整型的數值能達到42億。

16樓:匿名使用者

要看你的編譯器。如果用16位就算65535

如果32位,就等於16位的long型

或者64,就等於longlong型

無符號整形能為負數嗎?如果計算結果是負,他最終結果是什麼?

17樓:匿名使用者

無符號抄a = 無符

號b - 無符號c

無符號和 無符號運算的時候,結果也是無符號的,你說的例子1 - 2 = -1,

在int32環境下,二進位制表示結果為 32個1 ,這裡的-1是轉換成有符號來看的,無符號的值是4294967295,也就是說,1 - 2 = 4294967295

無符號a = 有符號b - 有符號c

這裡的右邊有符號計算成有符號, b = 1, c = 2,的話 1 - 2 = -1,

然後將-1的補碼錶示轉換成無符號, -1的補碼上面說過了,就是32個1, 就是4294967295

c語言輸出整型時為什麼有時會輸出負數

18樓:匿名使用者

可以把**貼出來嗎

樓主,我沒有出現你的情況

我用的是你的**,運用wintc編譯,**如下#include "stdio.h"

main()

輸入4-7,輸出為4,-7

沒有出現溢位現象

19樓:匿名使用者

溢位了吧,用unsigned int試試。

20樓:我有個將軍夢

整型的範圍是-127~128

c語言中無符號整數變數賦負整數為什麼不報錯,而且列印這個數也是負數

21樓:

給一個無符抄號變數賦一個負數,就襲把這個「bai負數」的補碼當du

正數對待了(unsigend的級zhi別高於int)——這和dao給一個浮點變數賦一個整型數時被提升為浮點型一樣——這符合c/c++的自動型別轉換規則,所以不報錯。至輸出還是負數恐怕不對,除非你強制為int型輸出,否則輸出是無符號的。

22樓:玹龗

沒有圖你就在這吹牛b?

無符號應該是你自己的問題或者編譯器的問題,反正我這裡不能輸出你不放**討論沒什麼意義

最多告訴你-1用 1111 1111儲存無符號輸出就是255

c語言 無符號整型的輸出

23樓:匿名使用者

b.不過個人覺得這題沒答案才對。平臺都沒說,怎麼會有準確答案呢?

vc6.0肯定不是這個答案,它的int是32位的。如果這題的int是16位的那麼就選b。

解釋:-1在記憶體中是以補碼形式儲存的。補碼的二進位制為:1111 1111 1111 1111

這個數按照無符號數輸出:也就是0xffff 也就是65535.

從視覺化的-1怎麼轉換到補碼形式:因為假設你的平臺是16位的-1補碼 = 2^16 - |-1| = 1 0000 0000 0000 0000 - 1 = 1111 1111 1111 1111

24樓:匿名使用者

int型複製給unsigned型,自動轉換型別。但是-1不再unsigned的範圍中,所以直接底層複製。-1的原碼是1000 0000 0000 0001(tc。

vc和gcc是1000 0000 0000 0000 0000 0000 0000 0001),補碼是1111 1111 1111 1111(tc。vc和gcc是1111 1111 1111 1111 1111 1111 1111 1111)。這個數原樣複製給unsigned型,其十進位制值為65535(tc。

vc和gcc是4294967295)。

25樓:雪燦之光

這題我在vc6.0中嘗試了一下結果為:4294967295

其實這題要指定執行平臺,不同平臺有不同結果。

26樓:匿名使用者

16位系統中一個int能存

儲的資料的範圍為-32768~32767,而unsigned能儲存的資料範圍則是0~65535。-1的十六進位制表示為:0xffff 與65535的16進製表示一致。所以結果為b

27樓:

unsigned int a是無符號整型,範圍從0~65535.

顯然b的值不在a的範圍內。溢位了。

28樓:匿名使用者

我覺得答案是c 你問問大師,,,,

29樓:匿名使用者

由所給答案可知計算機的整型變數為2位元組,

所以無符號a(unsigned int a)為2*8=16位因為輸出格式(%u)為無符號格式輸出

所以沒有符號位0-1不可能是負數,也可以理解為時0-1的下一個數是最大值2^16-1=65535

答案:b

c語言中為什麼左移不分符號數無符號數,而右移分呢

因為在c語言標準中bai,只du規定了無符號數的移zhi位操作是採用邏輯dao移位 即左移 右移都是使回用的邏輯答左移和邏輯右移 而對於有符號數,其左移操作還是邏輯左移,但右移操作是採用邏輯右移還是算術右移就取決於機器了!算術右移和邏輯右移的區別是 算術右移不右移符號位,即最高位,右移後前補0還是1...

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

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

C 程式設計中返回值問題,c 獲得外部程式返回值的問題

如果函式有返回值,則需要返回語句return。return語句的一般形式是 return 表示式 執行時,先計算出括號中表示式的值,再將該值返回給主調函式中的呼叫表示式。下面對return語句做一些說明 1 函式的返回值是通過函式中的 return 語句獲得的。return 語句將被呼叫函式中的一個...