1樓:匿名使用者
計算機用補碼錶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語言中為什麼int a=-1 printf("%o",a)等於177777?
2樓:賣萌自粽
可以看出,計算機來的整型是雙字源節長度的
,即16位,-1的整形資料,用補碼存於計算機中,是16個1,即1111111111111111,換算成十六進位制是ffff,再換算成八進位制便是177777了,十六進位制和八進位制都沒有直接的「負」號的,都是用補碼,所以用「%o」,這個八進位制格式符來格式整型的-1時,輸入就成了177777了。
這個程式中輸出八進位制的 1,結果為什麼是
計算機中一個正數的負數是其補碼 1。這樣做的原因是可以保證1個正數跟其負數相加永遠為0 例如,1是0x00000001 0x是16進位制,假設1個int有四個位元組長度 其負數 1則表示為0xfffffff1。可以很容易驗證兩者相加為0 把0xfffffff1表示為8進製表示則為3777777777...
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...
計算機中使用八進位制和十六進位制的原因是
前面已經說過了,重複一遍,計算機裡面只用二進位制,這個基本正確。但實際上,連二進位制都不完全對,實際上同餘計算,這個還需要你學很久。其實,對於計算機來說沒有進位制,只有溢位,不溢位怎麼有進位制?如果一個字長為128bit的機器,它的進位制就是2 128進位制的,因為小於這個數都不會產生進位。就好像我...