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

2021-03-03 22:26:36 字數 1750 閱讀 2520

1樓:匿名使用者

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

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

2樓:匿名使用者

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

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

3樓:匿名使用者

65535是16位的,

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

4樓:匿名使用者

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

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

或者64,就等於longlong型

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

5樓:匿名使用者

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

6樓:匿名使用者

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

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

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

7樓:匿名使用者

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

8樓:匿名使用者

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

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

9樓:匿名使用者

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

即 -666

原碼:1000 0010 1001 1010

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

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

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

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

10樓:匿名使用者

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

-666的原碼是

1000 0010 1001 1010

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

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

C無符號長整型1什麼意思,C語言中無符號長整型數的輸入輸出格式是什麼

if ulcrc 1 判斷ulcrc二進位制個位是否抄為1,如果ulcrc 1101,則襲ulcrc 0001 0001,自然bai 為真,再簡單的說,du就是判斷是否為奇數zhiulcrc ulcrc 1 crc32 polynomial ulcrc 1右移一位不賦dao值,即返回值是ulcrc右...

為什麼輸出的結果是,為什麼輸出的第一個結果是1?

雙重迴圈語句。第一次運算 用 i 的 初始值1 和 j 的 初始值 1,i j 輸出為 1。第二次運內算,i 等於 容 1,j 增 1 等於 2。第三次運算,i 等於 1,j 增 1 等於 3。第四次運算,i 等於 1,j 增 1 等於 4。第五次運算,i 等於 1,j 增 1 等於 5。第六次運算...

請問有符號短整型最小值的補碼(儲存碼)為什麼是

其次你問的真是一塌糊塗。接下來開始回答 首先我們假設int型別是四位 因為寫那麼多的0和1麻煩,只寫四個比較方便 以前的時候int型別的規定,用第一個位表示正負號,也就是原碼的表示方法,0001表示1,1001表示 1。如下表 現在可以看出,int的最小值應該為1111也就是 7,推廣到十六位,in...