十六進製制數後跟L U UL解析

2021-07-25 02:22:25 字數 3811 閱讀 2787

c語言支援兩種不同的數值型別,整數型別(也稱整型),浮點型別(也稱浮點型)。整數型別的值是整數,而浮點型別的值則可能還有小數部分。

整數型別分類

整數型別又分為兩大類:有符號型和無符號型。

有符號整數如果為正數或零,那麼最左邊的位(符號位)為0;如果為負數,則符號位為1。因此,最大的16位整數的二進位制表示形式是0111 1111 1111 1111,對應的值是32767(即2^15-1)。而最大的32位整數是0111 1111 1111 1111 1111 1111 1111 1111,對應的數值是2147483647(即2^31-1)。

不帶符號位的整數(最左邊的位是數值的一部分)的整數稱為無符號整數。最大的16位無符號整數是65535(即2^16-1),而最大的32位無符號整數是4294967295(即2^32-1)。

預設情況下,c語言中的整型變數都是有符號的,也就是說最左位保留為符號位。若要告訴編譯器變數沒有符號位,需要把它宣告成unsigned型別。無符號整數主要用於系統程式設計和底層與機器相關的應用。

c語言還提供了四個可以修飾int的關鍵字:short、long、signed,以及unsigned。利用這四個關鍵字,c語言標準定義了以下整數型別:

1) short int(可簡寫為 short)

2) int

3) long int(簡寫:long)

4) long long int(簡寫:long long)

5) unsigned short int(簡寫:unsigned short)

6) unsigned int

7) unsigned long int(簡寫:unsigned long)

8) unsigned long long int(簡寫:unsigned long long)

有沒有signed都表示有符號整數,例如:signed int等同於int。

一般我們把short稱為短整型,把long稱為長整型,把long long稱為超長整型,把int稱為整型。unsigned打頭的那些整數型別統稱為無符號整型。例如:我們稱unsigned short為無符號短整型,以此類推。

整型資料的長度

c語言只規定short <= int <=long int。具體還得看具體的編譯器,long int型並不能肯定就是64位的,很多時候long int和int表示的範圍是一致的。

在16位作業系統(例如dos)中,一般用2位元組存放乙個int型資料;在32位作業系統(例如windows98)中,預設為4位元組。各類整型資料的長度及讀寫格式見下表:

整數常量

常量是在程式中以文字形式出現的數,而不是讀、寫或計算出來的數。c語言允許用十進位制(基數為10)、八進位制(基數為8)和十六進製制(基數為16)形式書寫整數常量。

八進位制數是用數字0~7書寫的。八進位制數的每一位表示乙個8的冪(這就如同十進位制數的每一位表示10的冪一樣)。因此,八進位制的數237表示成十進位制數就是2x8^2+3x8^1+7x8^0=128+24+7=159。

十六進製制數是用數字0~9加上字母a~f書寫的,其中字母a~f表示10~15的數。十六進製制數的每一位表示乙個16的冪,十六進製制數1af的十進位制數值是1x16^2+10x16^1+15x16^0=256+160+15=431。

十進位制常量包含0~9中的數字,但是一定不能以零開頭:15 255 32767

八進位制常量只包含0~7中的數字,而且必須要以零開頭:017 0377 077777

十六進製制常量包含0~9中的數字和a~f中的字母,而且總是以0x開頭:0xf 0xff 0x7fff

十六進製制常量中的字母既可以是大寫字母也可以是小寫字母:0xf 0xff 0x7fff

八進位制和十六進製制只是書寫數的方式,它們不會對數的實際儲存方式產生影響。整數都是以二進位制形式儲存的,跟表示方式無關。任何時候都可以從一種書寫方式切換到另一種書寫方式,甚至可以混合使用:10+015+0x20的值為55(十進位制)。

十進位制整數常量的型別通常為int,但如果常量的值大得無法儲存在int型中,就用long int型別。如果出現long int不夠用的情況,則用unsigned long int作最後的嘗試。確定八進位制和十六進製制常量的規則時,編譯器會依次嘗試int、unsigned int、long int和unsigned long int型別,直到找到能表示該常量的型別。

c99確定整數常量型別的規則與c89有些不同。對於沒有字尾(u、u、l、l、ll、ll)的十進位制常量,其型別是int、long int或long long int中能表示該值的「最小」型別。對於八進位制或者十六進製制常量,可能的型別順序為int、unsigned int、long int、unsigned long int、long long int和unsigned long long int。常量後面的任何字尾都會改變可能型別的列表。例如,以u(或u)結尾的常量型別一定是unsigned int、unsigned long int和unsigned long long int中的一種。

15l 0377l 0x7fffl

為了指明是無符號常量,可以在常量後邊加上字母u(或u):

15u 0377u 0x7fffu

l和u可以結合使用,以表明常量既是長整型又是無符號的:0xfffffffful。(字母l、u的順序和大小寫無所謂。)

在c99中,以ll或ll(兩個字母大小寫要一致)結尾的整數常量是long long int型的。如果在ll或ll的前面或後面增加字母u(或u),則該整數常量為unsigned long long int型。

整數溢位

對整數執行算數運算時,其結果有可能因為太大而無法表示。例如,對兩個int值進行算術運算時,結果必須仍然能用int型別來表示;否則(表示結果所需的數字太多)就會發生溢位。

整數溢位時的行為要根據運算元是有符號型還是無符號型來確定。有符號整數運算中發生溢位時,程式的行為是未定義的,未定義行為的結果是不確定的。最可能的情況是,僅僅是運算的結果出錯了,但程式也有可能崩潰,或出現其他意想不到的情況。

無符號整數運算過程中發生溢位時,結果是有定義的:正確答案對2^n取模,其中n是用於儲存結果的位數,例如,如果對無符號的16位數65535加1,其結果可以保證為0。

整數讀/寫

讀寫無符號整數、短整數和長整數需要轉換說明符。

讀寫無符號整數時,使用字母u、o或x代替轉換說明中的d。如果使用u說明符,該數將以十進位制形式讀寫,o表示八進位制形式,而x表示十六進製制形式。

unsigned int u;

scanf("%u", &u); /* reads u in base 10 */

printf("%u", u); /* writes u in base 10 */

scanf("%o", &u); /* reads u in base 8 */

printf("%o", u); /* writes u in base 8 */

scanf("%x", &u); /* reads u in base 16 */

printf("%x", u); /* writes u in base 16 */

讀寫短整數時,在d、o、u或x前面加上字母h:

short s;

scanf("%hd", &s);

printf("%hd", s);

讀寫長整數時,在d、o、u或x前面加上字母l:

short l;

scanf("%ld", &l);

printf("%ld", l);

讀寫長長整數時(僅限c99),在d、o、u或x前面加上字母ll:

short ll;

scanf("%lld", &ll);

printf("%lld", ll);

oracle產生十六進製制數

1 建立seq,產生十進位制的序列號 sql code?1 2 3 4 5 6 7 8 createsequenceseq hex minvalue 0 maxvalue 10000000 startwith0 incrementby1 cache 20 cycle order 2 寫乙個函式,返回...

十六進製制轉八進位制數

問題描述 給定n個十六進製制正整數,輸出它們對應的八進位制數。輸入格式 輸入的第一行為乙個正整數n 1 n 10 接下來n行,每行乙個由0 9 大寫字母a f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。輸出格式 輸出n行,每行為輸入對應的八進位制正整數。注意 輸...

進製轉換 十進位制數轉十六進製制數

十六進製制數是在程式設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f共16個符號,分別表示十進位制數的0至15。十六進製制的計數方法是滿16進1,所以十進位制數16在十六進製制中是10,而十進位制的17在十六進製制中是11,以此類推,十進位制...