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

2021-04-08 23:57:56 字數 2125 閱讀 4194

1樓:

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

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

2樓:玹龗

沒有圖你就在這吹牛b?

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

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

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

3樓:匿名使用者

因為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了,當然變成正數了。

4樓:匿名使用者

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

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

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

5樓:匿名使用者

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

6樓:匿名使用者

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

c++中給無符號型別賦了個負值的後果

7樓:小兆

在記憶體長度上沒有溢位的情況下,比如u和u2都是4個位元組,以及有符號整數也是4個位元組,這時候將原資料按照位模式逐位拷貝到目的變數。比如例子中的-32,在記憶體裡這個數的十六進位制表示為:0xffffffe0。

將這個十六進位制數逐位拷貝到一個無符號整數變數的記憶體空間後,列印出來就是你看到的結果。

8樓:匿名使用者

-1 在機器中的真實表示為0xffffffff因此你把它當成一個正數去看的話那麼就是2^32-1,也就是一個非常大的正整數

你明白了什麼麼?

其實對於機器而言,無所謂正負之分,僅僅在於你如何去看待這個資料

在c語言中將一個很大的正整數賦值給一個int型別變數a,輸出a時有時會顯示負值,為何?

9樓:聽不清啊

在不同的抄c系統中,int有不同的表示範圍。

32位(4位元組)的int,它可以表示的數字範圍是-2147483648~+ 2147483647,共可表示4294967296個不同的數。

這是因為它有點像我們用(每個檔位上只可以表示0~9)的算盤。假如我們的一個算盤有4個檔位,它能表示從0~9999共10000個不同的數字。當我們要把比9999更大的數字存放到算盤上時,走出的部分就「丟失」了。

如果要存的數字是12345,按「老規矩」存放完畢後,讀取算盤上的數字時,由於資料發生了丟失,只能讀到2345。這是由於12345-10000=2345。

再來看計算機裡的int,如果我們要把2147483648存入到int變數中時,由於超出了範圍,就發生了丟失。讀取時,就變成了2147483648-4294967296=-2147483648了。

其它更大的數字,所變成的負數大小,也是這樣的規律(都是減去了4294967296或它的倍)。

10樓:玩尼丶瑪

int 型只可以表示來 —36768到+32767 這其實是一自

個邏輯圈,意思就是說如果該數超過了最大表示範圍那麼就從頭開始,舉個例子吧 ,如 +32788超過了最大表示範圍,比最大表示範圍多1,那麼該數其實就是-32768

C語言整數移位問題,關於C語言負整數移位運算的問題。

當要求的移位數 多於 數的位數時,你的程式有錯。例如 12 5 應當允許轉多個圈 給你改了一下,但沒有給你改 eof scanf eof 是個達不到的條件 輸入數是否有最多位數規定,否則直接用字串讀入為好。include include int main printf s n num 這裡給你按字串...

c語言無符號有符號變數輸出問題,C語言程式設計有符號和無符號整型變數顯示問題

首先 0xe0 十進位制是 14 16 224 你用有符號的char 儲存其實是儲存了 224 256 32 x 輸出的是十六進位制數 其實是 32的十六進位制 d 其實就是輸出 32 第三個是有符號 就是224 了 挺有意思的題目。逐條解釋吧。首先要明白char是按一個位元組儲存的,int是按4個...

C語言中要求運算元是整數的運算子是ABCD

是整除取餘,要求運算元是整數。都可以用其它型別。選c c,是一個取餘運算子,他要求兩邊都是整數,否則編譯會錯 c,原因是取餘運算子的左右兩邊都必須是整數。c是答案是答案,一次性貼完問題行不,我都答了你兩題了 在c語言中要求參加運算的數必須是整數的運算子是 在c語言中要求參加運算的數必須是整數的運算子...