公安部網(wǎng)站備案sem電子掃描顯微鏡
2) 八進(jìn)制
八進(jìn)制由 0~7 八個(gè)數(shù)字組成,使用時(shí)必須以0
開頭(注意是數(shù)字 0,不是字母 o),例如:
//合法的八進(jìn)制數(shù)int a = 015; //換算成十進(jìn)制為 13
int b = -0101; //換算成十進(jìn)制為 -65
int c = 0177777; //換算成十進(jìn)制為 65535
//非法的八進(jìn)制
int m = 256; //無前綴 0,相當(dāng)于十進(jìn)制
int n = 03A2; //A不是有效的八進(jìn)制數(shù)字
3) 十六進(jìn)制
十六進(jìn)制由數(shù)字 0~9、字母 A~F 或 a~f(不區(qū)分大小寫)組成,使用時(shí)必須以0x
或0X
(不區(qū)分大小寫)開頭,例如:
//合法的十六進(jìn)制int a = 0X2A; //換算成十進(jìn)制為 42
int b = -0XA0; //換算成十進(jìn)制為 -160
int c = 0xffff; //換算成十進(jìn)制為 65535
//非法的十六進(jìn)制
int m = 5A; //沒有前綴 0X,是一個(gè)無效數(shù)字
int n = 0X3H; //H不是有效的十六進(jìn)制數(shù)字
4) 十進(jìn)制
十進(jìn)制由 0~9 十個(gè)數(shù)字組成,沒有任何前綴,和我們平時(shí)的書寫格式一樣,不再贅述。
二進(jìn)制數(shù)、八進(jìn)制數(shù)和十六進(jìn)制數(shù)的輸出
C語言中常用的整數(shù)有 short、int 和 long 三種類型,通過 printf 函數(shù),可以將它們以八進(jìn)制、十進(jìn)制和十六進(jìn)制的形式輸出。上節(jié)我們講解了如何以十進(jìn)制的形式輸出,這節(jié)我們重點(diǎn)講解如何以八進(jìn)制和十六進(jìn)制的形式輸出,下表列出了不同類型的整數(shù)、以不同進(jìn)制的形式輸出時(shí)對(duì)應(yīng)的格式控制符:
short | int | long | |
---|---|---|---|
八進(jìn)制 | %ho | %o | %lo |
十進(jìn)制 | %hd | %d | %ld |
十六進(jìn)制 | %hx 或者 %hX | %x 或者 %X | %lx 或者 %lX |
十六進(jìn)制數(shù)字的表示用到了英文字母,有大小寫之分,要在格式控制符中體現(xiàn)出來:
- %hx、%x 和 %lx 中的
x
小寫,表明以小寫字母的形式輸出十六進(jìn)制數(shù); - %hX、%X 和 %lX 中的
X
大寫,表明以大寫字母的形式輸出十六進(jìn)制數(shù)。
八進(jìn)制數(shù)字和十進(jìn)制數(shù)字不區(qū)分大小寫,所以格式控制符都用小寫形式。如果你比較叛逆,想使用大寫形式,那么行為是未定義的,請(qǐng)你慎重:
- 有些編譯器支持大寫形式,只不過行為和小寫形式一樣;
- 有些編譯器不支持大寫形式,可能會(huì)報(bào)錯(cuò),也可能會(huì)導(dǎo)致奇怪的輸出。
注意,雖然部分編譯器支持二進(jìn)制數(shù)字的表示,但是卻不能使用 printf 函數(shù)輸出二進(jìn)制,這一點(diǎn)比較遺憾。當(dāng)然,通過轉(zhuǎn)換函數(shù)可以將其它進(jìn)制數(shù)字轉(zhuǎn)換成二進(jìn)制數(shù)字,并以字符串的形式存儲(chǔ),然后在 printf 函數(shù)中使用%s
輸出即可??紤]到讀者的基礎(chǔ)還不夠,這里就先不講這種方法了。
【實(shí)例】以不同進(jìn)制的形式輸出整數(shù):
#include <stdio.h>
int main()
{
short a = 0b1010110; //二進(jìn)制數(shù)字
int b = 02713; //八進(jìn)制數(shù)字
long c = 0X1DAB83; //十六進(jìn)制數(shù)字
printf(“a=%ho, b=%o, c=%lo\n”, a, b, c); //以八進(jìn)制形似輸出
printf(“a=%hd, b=%d, c=%ld\n”, a, b, c); //以十進(jìn)制形式輸出
printf(“a=%hx, b=%x, c=%lx\n”, a, b, c); //以十六進(jìn)制形式輸出(字母小寫)
printf(“a=%hX, b=%X, c=%lX\n”, a, b, c); //以十六進(jìn)制形式輸出(字母大寫)
return 0;
}
運(yùn)行結(jié)果:
a=126, b=2713, c=7325603
a=86, b=1483, c=1944451
a=56, b=5cb, c=1dab83
a=56, b=5CB, c=1DAB83
從這個(gè)例子可以發(fā)現(xiàn),一個(gè)數(shù)字不管以何種進(jìn)制來表示,都能夠以任意進(jìn)制的形式輸出。數(shù)字在內(nèi)存中始終以二進(jìn)制的形式存儲(chǔ),其它進(jìn)制的數(shù)字在存儲(chǔ)前都必須轉(zhuǎn)換為二進(jìn)制形式;同理,一個(gè)數(shù)字在輸出時(shí)要進(jìn)行逆向的轉(zhuǎn)換,也就是從二進(jìn)制轉(zhuǎn)換為其他進(jìn)制。
輸出時(shí)加上前綴
請(qǐng)讀者注意觀察上面的例子,會(huì)發(fā)現(xiàn)有一點(diǎn)不完美,如果只看輸出結(jié)果:
- 對(duì)于八進(jìn)制數(shù)字,它沒法和十進(jìn)制、十六進(jìn)制區(qū)分,因?yàn)榘诉M(jìn)制、十進(jìn)制和十六進(jìn)制都包含 0~7 這幾個(gè)數(shù)字。
- 對(duì)于十進(jìn)制數(shù)字,它沒法和十六進(jìn)制區(qū)分,因?yàn)槭M(jìn)制也包含 0~9 這幾個(gè)數(shù)字。如果十進(jìn)制數(shù)字中還不包含 8 和 9,那么也不能和八進(jìn)制區(qū)分了。
- 對(duì)于十六進(jìn)制數(shù)字,如果沒有包含 a~f 或者 A~F,那么就無法和十進(jìn)制區(qū)分,如果還不包含 8 和 9,那么也不能和八進(jìn)制區(qū)分了。
區(qū)分不同進(jìn)制數(shù)字的一個(gè)簡(jiǎn)單辦法就是,在輸出時(shí)帶上特定的前綴。在格式控制符中加上#
即可輸出前綴,例如 %#x、%#o、%#lX、%#ho 等,請(qǐng)看下面的代碼:
#include <stdio.h>
int main()
{
short a = 0b1010110; //二進(jìn)制數(shù)字
int b = 02713; //八進(jìn)制數(shù)字
long c = 0X1DAB83; //十六進(jìn)制數(shù)字
printf(“a=%#ho, b=%#o, c=%#lo\n”, a, b, c); //以八進(jìn)制形似輸出
printf(“a=%hd, b=%d, c=%ld\n”, a, b, c); //以十進(jìn)制形式輸出
printf(“a=%#hx, b=%#x, c=%#lx\n”, a, b, c); //以十六進(jìn)制形式輸出(字母小寫)
printf(“a=%#hX, b=%#X, c=%#lX\n”, a, b, c); //以十六進(jìn)制形式輸出(字母大寫)
return 0;
}
運(yùn)行結(jié)果:
a=0126, b=02713, c=07325603
a=86, b=1483, c=1944451
a=0x56, b=0x5cb, c=0x1dab83
a=0X56, b=0X5CB, c=0X1DAB83
十進(jìn)制數(shù)字沒有前綴,所以不用加#
。如果你加上了,那么它的行為是未定義的,有的編譯器支持十進(jìn)制加#
,只不過輸出結(jié)果和沒有加#一樣,有的編譯器不支持加#
,可能會(huì)報(bào)錯(cuò),也可能會(huì)導(dǎo)致奇怪的輸出;但是,大部分編譯器都能正常輸出,不至于當(dāng)成一種錯(cuò)誤。
下面來實(shí)戰(zhàn)一下,驗(yàn)證一下數(shù)值在不同進(jìn)制的表示下的情況
首先我們總結(jié)一下上面的內(nèi)容:
- 各進(jìn)制表示
- 二進(jìn)制表示:使用時(shí)必須以
0b
或0B
(不區(qū)分大小寫)開頭 - 八進(jìn)制表示:使用時(shí)必須以
0
開頭(注意是數(shù)字 0,不是字母 o) - 十六進(jìn)制表示:使用時(shí)必須以
0x
或0X
(不區(qū)分大小寫)開頭
- 各進(jìn)制打印
- 二進(jìn)制打印:C語言沒有提供打印數(shù)值二進(jìn)制表示的方式
- 八進(jìn)制打印:printf(“%o”, n) printf(“%#o”, n)
- 十進(jìn)制打印:printf(“%d”, n) printf(“%#d”, n)
- 十六進(jìn)制打印:printf(“%x”, n)
- 基本常識(shí):不管是哪種進(jìn)制,在計(jì)算機(jī)里面都是以0/1來表示的,說的更具體一點(diǎn),都是以補(bǔ)碼的形式存在。
一、首先演示一下用不同進(jìn)制來表示同一個(gè)數(shù)值
#include <stdio.h>
//該函數(shù)用來打印unsigned char的二進(jìn)制表示
void printf_bin_8(unsigned char num)
{
int k;
unsigned char p = (unsigned char)#
for (int k = 7; k >= 0; k–) //處理8個(gè)位
{
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Go語言工程師,想要提升技能,往往是自己摸索成長或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Go語言全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Golang知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新
如果你覺得這些內(nèi)容對(duì)你有幫助,可以添加V獲取:vip1024b (備注Go)
一個(gè)人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對(duì)IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場(chǎng)吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!
項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新**
如果你覺得這些內(nèi)容對(duì)你有幫助,可以添加V獲取:vip1024b (備注Go)
[外鏈圖片轉(zhuǎn)存中…(img-EQ47xrhT-1712959253361)]
一個(gè)人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對(duì)IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場(chǎng)吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!