C语言中的二进制、八进制和十六进制的表示
二進(jìn)制數(shù)、八進(jìn)制數(shù)和十六進(jìn)制數(shù)的表示
一個(gè)數(shù)字默認(rèn)就是十進(jìn)制的,表示一個(gè)十進(jìn)制數(shù)字不需要任何特殊的格式。但是,表示一個(gè)二進(jìn)制、八進(jìn)制或者十六進(jìn)制數(shù)字就不一樣了,為了和十進(jìn)制數(shù)字區(qū)分開來(lái),必須采用某種特殊的寫法,具體來(lái)說(shuō),就是在數(shù)字前面加上特定的字符,也就是加前綴。
1 . 二進(jìn)制
二進(jìn)制由 0 和 1 兩個(gè)數(shù)字組成,使用時(shí)必須以0b或0B(不區(qū)分大小寫)開頭,例如:
//合法的二進(jìn)制 int a = 0b101; //換算成十進(jìn)制為 5 int b = -0b110010; //換算成十進(jìn)制為 -50 int c = 0B100001; //換算成十進(jìn)制為 33//非法的二進(jìn)制 int m = 101010; //無(wú)前綴 0B,相當(dāng)于十進(jìn)制 int n = 0B410; //4不是有效的二進(jìn)制數(shù)字注意,標(biāo)準(zhǔn)的C語(yǔ)言并不支持上面的二進(jìn)制寫法,只是有些編譯器自己進(jìn)行了擴(kuò)展,才支持二進(jìn)制數(shù)字。換句話說(shuō),并不是所有的編譯器都支持二進(jìn)制數(shù)字,只有一部分編譯器支持,并且跟編譯器的版本有關(guān)系。
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; //無(wú)前綴 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è)無(wú)效數(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語(yǔ)言中常用的整數(shù)有 short、int 和 long 三種類型,通過(guò) printf 函數(shù),可以將它們以八進(jìn)制、十進(jìn)制和十六進(jìn)制的形式輸出。如何以八進(jìn)制和十六進(jìn)制的形式輸出,下表列出了不同類型的整數(shù)、以不同進(jìn)制的形式輸出時(shí)對(duì)應(yīng)的格式控制符:
十六進(jìn)制數(shù)字的表示用到了英文字母,有大小寫之分,要在格式控制符中體現(xiàn)出來(lái):
%hx、%x 和 %lx 中的x小寫,表明以小寫字母的形式輸出十六進(jìn)制數(shù);%hX、%X 和 %lX 中的X大寫,表明以大寫字母的形式輸出十六進(jìn)制數(shù)。八進(jìn)制數(shù)字和十進(jìn)制數(shù)字不區(qū)分大小寫,所以格式控制符都用小寫形式。
注意,部分編譯器支持二進(jìn)制數(shù)字的表示,但是卻不能使用 printf 函數(shù)輸出二進(jìn)制。當(dāng)然,通過(guò)轉(zhuǎn)換函數(shù)可以將其它進(jìn)制數(shù)字轉(zhuǎn)換成二進(jìn)制數(shù)字,并以字符串的形式存儲(chǔ),然后在 printf 函數(shù)中使用%s輸出即可。
以不同進(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è)數(shù)字不管以何種進(jìn)制來(lái)表示,都能夠以任意進(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í)加上前綴
對(duì)于如上l例子如果只看輸出結(jié)果:
區(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ù)字沒有前綴,所以不用加#。
如果感覺不錯(cuò)的話請(qǐng)點(diǎn)贊喲!!!
總結(jié)
以上是生活随笔為你收集整理的C语言中的二进制、八进制和十六进制的表示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java内部类是什么?
- 下一篇: Spring Boot EasyUI d