❶ C語言 十進制負數如何轉換八、十六進制
可以先轉換成二進制 617/2 308 餘1
/2 154 餘0
/2 77 餘0
/2 38 餘1
/2 19 餘0
/2 9 餘1
/2 4 餘1
/2 2 餘0
/2 1 餘0
/2 0 餘1
所以為 1001101001 取其的補碼加1 就=-617 在換算為8 16進制
❷ C語言負數的補碼怎麼轉換的如-12345怎麼轉化為53191的
數在計算機中是以二進制形式表示的。
數分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,0是正,1是副。
以下都以8位整數為例,
原碼就是這個數本身的二進制形式。
例如
1000001
就是-1
0000001
就是+1
正數的反碼和補碼都是和原碼相同。
負數的反碼是將其原碼除符號位之外的各位求反
[-3]反=[10000011]反=11111100
負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。
[-3]補=[10000011]補=11111101
一個數和它的補碼是可逆的。
為什麼要設立補碼呢?
第一是為了能讓計算機執行減法:
[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)
[10000000]補
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
有人會問
10000000這個補碼表示的哪個數的補碼呢?
其實這是一個規定,這個數表示的是-128
所以n位補碼能表示的范圍是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數多一個
❸ C語言中怎麼輸出一個負16進制的數
負數用十六進製表示,通常用的是補碼的方式表示。
int
a=-3;
在C語言中可以這么輸出:printf("%hhx\n",
a);
十六進制(英文名稱:Hexadecimal),是計算機中數據的一種表示方法。同我們日常生活中的表示法不一樣。它由0-9,A-F組成,字母不區分大小寫。與10進制的對應關系是:0-9對應0-9;A-F對應10-15;N進制的數可以用0~(N-1)的數表示,超過9的用字母A-F。
正數的補是它本身;負數的補碼是它本身的值每位求反,最後再加一。
例如:求-3的十六進制
3的十六進制為0003,3求反之後是C,再加1,成D,所以-3的十六進制就是:FFFD
❹ C語言中,負數的二進制碼怎麼轉換為十進制
計算機中的整數是用補碼存儲的,最高位為符號位,C語言也遵從同樣的規則。
如果最高位為0則為正數,求值的時候,直接轉為10進制即可。
最高位如果為1代表為負數,求值的時候,需要先把二進制的值按位取反,然後加1得到負數絕對值(相反數)的二進制碼,然後轉為10進制,加上負號即可。
以char型為例,char佔一個位元組,即8位。
對於二進制值B10110011轉換十進制過程為:
先取反,即1變0,0變1,得到:
B0100 1100
再加1:
B0100 1101
轉為十進制,即按照每位的權值乘上對應位的值,結果相加即可。
十進制值=0*2^7 + 1*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
=0+64+0+0+8+4+0+1
=77
加上符號,最終的十進制值就是-77。
即B10110011 表示的十進制值為-77。