這個程式中輸出八進位制的 1,結果為什麼是

2022-11-17 11:25:53 字數 4026 閱讀 4225

1樓:匿名使用者

計算機中一個正數的負數是其補碼+1。這樣做的原因是可以保證1個正數跟其負數相加永遠為0

例如,+1是0x00000001 (0x是16進位制,假設1個int有四個位元組長度),其負數-1則表示為0xfffffff1。(可以很容易驗證兩者相加為0)。

把0xfffffff1表示為8進製表示則為37777777777。

你得到的值是177777是由於你(應該是他們)的系統int只有兩個位元組。但是道理是一樣。

2樓:點點點迴圈

程式中int變數賦值的都是10進位制的數

本題考驗的是10進位制轉8進位制,同時要注意的是記憶體大小,int佔16位首先10進位制轉為二進位制

8->0(0...)1000

這裡需要注意,計算機裡,表示負數不是直接使用原碼(絕對值的二進位制),而是要用補碼+1來表示

-1->0(0...)0001->1(1...)1110+1->1(1...)1111

二進位制轉8進位制(每隔3位二進位制變一個八進位制數,補齊16位為18位,前面加個00)

000(0...)1000->0(0.....)1 0001(1...)1111->1(7...)7

3樓:

你這個系統的int型是16位2位元組的。

j=-1,是個有符號整形,對應二進位制是11111111 11111111,共16個1。

%o以八進位制輸出,上面的16個1對應到八進位制,就是177777。

4樓:名字重複了

別告訴我溢位了。。。

c語言:-1以8進位制輸出為什麼是177777?

5樓:戶信婁酉

首先,你的機器是32位機,也就是1個字佔32個bit位,這樣一個字最多可表示的十進位制數字為

2^32

=4294967296。然後在該字中存放-1,這樣該字的值為4294967295

轉換為8進位制就是3777777777

6樓:手機使用者

從上面看你的編譯器裡的int是佔兩個位元組!!

-1的補碼是這麼算出來的:

(0000 0000 0000 0001)取反=1111 1111 1111 1110

1111 1111 1111 1110 + 1 = 1111 1111 1111 1111

而1111 1111 1111 1111化成8過制就是 177777

當int 以%d輸出的話 1111 1111 1111 1111 就是以有符號十進位制的形式顯示也就是:-1

當int 以%o輸出的話 1111 1111 1111 1111 就是無符號的八進位制形式顯示也就是:177777

7樓:匿名使用者

計算機中用的是補碼,負數的補碼是符號位不變,其他位取反,再加1

8樓:匿名使用者

高位應該有兩個零,只是沒輸出而已

為什麼-1八進位制輸出是177777,十六進位制輸出位為ffff?

9樓:匿名使用者

計算機用補碼錶bai示負數,補碼是對du二進位制數取反zhi+1得到,若用dao16位表示,即為版0000 0000 0000 0001,取反為1111 1111 1111 1110,+1為1111 1111 1111 1111,即為-1,換成權十六進位制即為0xffff,換成8進製為0177777.

這麼做的目的是把最高位當作符號位,0111 1111 1111 1111就是32767,1000 0000 0000 0000被人為解釋成-32768,而將32767取反+1就是1000 0000 0000 0001,即-32767,以此類推,1111 1111 1111 1111就是-1了,負數的最高位總是1,正數總是0,所以該位也被稱之為有符號數的符號位

c語言中,-1的輸出問題

10樓:世鑲柳

因為你的編譯器是16位的,所以……

如果是32位的,如vc 2008就不是這樣的結果了。

11樓:匿名使用者

-1的補碼錶示是1111111111111111,按十進位制輸入出是-1,按八進位制輸出是把這個數從尾向頭三位一組三位一組輸出。也就是1,111,111,111,111,111。你算一下當然是177777了。

按十六進位制輸出是4位一組來輸出。1111,1111,1111,1111把每個4位算出來就是ffff。

12樓:

八進位制,十六進位制輸出與編譯器有關.

負數用補碼錶示.

補碼等於反碼加1

十六進位制:

-1 -> 負 0001 -> 反碼 fffe + 1-> ffff

十六進位制 ffff ->

2進位制 1111 1111 1111 1111 ->每3位合成一位,轉 8 進位制:

1 111 111 111 111 111177777

---------------------ms vc++ 編譯器 得:

十六進位制 ffffffff

8進位制 37777777777

[原理相同,字長比你的編譯器長]

為什麼執行 int a=-1; printf("%d,%o",a,a);時輸出為-1,177777,謝謝

13樓:聽不清啊

這是因為int在計算機中是以補碼形式存放的。

在16位的c編譯器中,int佔2個位元組,-1的補碼是1111111111111111(16個1)

所以,以十進位制輸出時為-1,以八進位制輸出時就是177777

14樓:

預設是以整型資料輸出的,樓主的 int a=-1; printf("%d,%o",a,a);時輸出為-1,177777是正確的結果,因為在整型中,「-1」的八進位制數是177777,若果樓主把程式改為 int a=-1; printf("%d,%lo",a,a);時,那麼相應的輸出就會為-1,-1了,樓主可以試試

15樓:笑白打醬油

你這個應該是16位機吧

-1的2進位制碼是 1111 1111 1111 1111,然後對應一下如圖所示:

16樓:

前面一個輸出的是a=-1;後面一個格式不對,輸出得是隨機數

printf("%d,%o,%x",-1,-1,-1);

17樓:騎著瘋牛撞交警

在程式設計中,資料在記憶體中都是以補碼的形式儲存的。

-1用原碼錶示為:

1000000000000001

它的補碼為:

111111111111111;

而%d 表示以十進位制形式輸出資料 結果為-1;

%o表示以八進位制形式輸出資料 結果為177777;

%x表示以十六進位制形式輸出資料 結果為 ffff;

希望可以幫到你。

18樓:唯一客

整型的-1.八進位制的-1,十六進位制的-1(注:負數在2.8.16進位制裡,都是取反加一)

19樓:匿名使用者

這裡是對-1進行不同的表示。

%d的意思是輸出「以帶符號的十進位制形式輸出整數(負數時輸出符號,正數不輸出。)」

%o的意思是「以無符號的八進位制形式輸出整數。」

%x的意思是「以無符號的十六進位制形式輸出整數。」

位元組不同輸出的結果可能也會不同吧,

不過我感覺這題的目的就是去我上面寫的那些基本的意思吧。呵呵

20樓:

你定義的識別符號不同,輸出結果就不同,也就是輸出不同型別的-1;

21樓:匿名使用者

整數-1在計算機中用16進製表示就是0ffff。

%d將-1用整數顯示,所以看到-1

%o將-1用8進位制顯示,你自己轉換一下就能看到顯示的結果吧。

%x將-1用16進位制顯示,所以看到ffff。

為什麼 1八進位制輸出是177777,十六進位制輸出位為ffff

計算機用補碼錶bai示負數,補碼是對du二進位制數取反zhi 1得到,若用dao16位表示,即為版0000 0000 0000 0001,取反為1111 1111 1111 1110,1為1111 1111 1111 1111,即為 1,換成權十六進位制即為0xffff,換成8進製為0177777....

1 實現十進位制純小數向二進位制 八進位制 十六進位制純小數的轉換

以下是basic程式 a為十進位制小數,x為要轉換的進位制。供參考。10 a 0.875 11 x 16 12 i 0 20 print 0.21 a a x 22 b int a 23 a a b 24 print b 25 i i 1 26 if a 0 and i 10 goto 2130 e...

C語言的十進位制數轉換八進位制演算法有哪些

原發布者 血戰長空wlg 題目 數制轉換問題1.需求分析將十進位制數n轉換成八進位制數是計算機實現計算的基本問題,解決方案很多,其中最簡單的方法是除8取餘法。1 本方案採用順序棧的方式模擬整個過程。其原理如下 例子 1348 10 2504 8nndiv8nmod813481684168210212...