您好,登錄后才能下訂單哦!
/*語言中進制表示?: ????二進制表示?:?在二進制數(shù)字前面加上0b; ????八進制表示?:?在八進制數(shù)字前面加上0; ????十六進制表示?:?在十六進制前面加上0x; 進制轉(zhuǎn)換?; ????將其他進制轉(zhuǎn)換成八進制?:?在printf函數(shù)中以%o占位; ????將其他進制轉(zhuǎn)換成十六進制?:?在printf函數(shù)中以%x占位; ????在C語言中,沒有占位符可將其他進制轉(zhuǎn)換成二進制; ????將其他進制轉(zhuǎn)換成十進制?:?在printf函數(shù)中以%i或%d占位; 進制轉(zhuǎn)換的原理公式?:?假定m為一個十進制數(shù),轉(zhuǎn)換成nk,nk-1,nk-2,...,n2,n1,n0的l進制數(shù) ?????????????????????則?m?=?n0?+?n1?*?l^1?+?n2?*?l^2?+?....?+?nk-2?*?l^(k-2)?+?nk-1?*?l?^(k-1)?+?nk?*?l^k ?????????????????????由上可見,當(dāng)?shù)仁阶笥覂啥送瑫r除以l時,余項為n0,在整數(shù)部分除以l則余項為n1,以此類推,便可以得到m的l進制表達(dá) 案例:十進制轉(zhuǎn)換二進制(逆序打印) #include?<stdio.h> void?printBin(int?num); int?main(int?argc,?const?char?*?argv[])?{??? ????int?num?=?4;?//?100; ????printBin(num); ????return?0; } void?printBin(int?num) { ????int?zheng?=?num; ????while?(zheng?!=?0) ????{ ????????int?yu?=?zheng?%?2; ????????printf("%i",yu); ????????zheng?=?zheng?/?2; ????} ????printf("\n"); } n為二進制的取值范圍?:?0~2^n?-1 二進制轉(zhuǎn)八進制?:?三位變一位 二進制轉(zhuǎn)十六進制?:?四位變一位 原碼?反碼?補碼 ????數(shù)據(jù)內(nèi)存中均是以補碼形式存儲,正數(shù)的原碼,反碼,補碼全部一樣,三碼合一 ????原碼?:?最高位為符號位(正數(shù)為0,負(fù)數(shù)為1),其他位則為數(shù)字位 ????反碼?:?負(fù)數(shù)的反碼,最高位符號位不變,數(shù)字位取反 ????補碼?:?負(fù)數(shù)的補碼,反碼加1 位運算符?: ????按位與?:?&????#數(shù)字轉(zhuǎn)換成二進制后,對應(yīng)位,全真則真,由此可見,任何數(shù)字和1的按位與還是數(shù)字本身????#注?:?可用此法結(jié)合移位運算進行進制轉(zhuǎn)換 ????按位或?:?|????#數(shù)字轉(zhuǎn)換成二進制后,對應(yīng)位上,一真則真,由此可見,任何數(shù)字和0的按位或還是數(shù)字本身 ????按位異或?:?^????#數(shù)字轉(zhuǎn)換成二進制后,對應(yīng)位上,相同則取0,不同則取1.相同的兩個數(shù)字按位異或結(jié)果為0,且按位異或滿足交換律????#應(yīng)用?:?交換兩個變量的值 ????取反?:?^????#取反操作,是直接對存儲在內(nèi)存中的補碼進行取反,因此要獲得數(shù)字本身,還需將其轉(zhuǎn)換成原碼之后,再計算 ????左移?:?<<????#將二進制整體左移n位,缺位補0,相當(dāng)于原來的數(shù)字乘以2^n ????右移?:?>>????#將二進制除了符號位之外整體右移n位,缺位按照符號位的取值進行補齊,相當(dāng)于原來的數(shù)字乘以2^n ????????#注?:?左移或右移操作均是對補碼進行操作 案例一?:?交換變量的值 ????方法一?: ???????int?num1?=?32; ???????int?num2?=?21; ???????int?temp?=?num1?+?num2; ???????num1?=?temp?-?num1; ???????num2?=?temp?-?num1; ????方法二?: ????????int?num1?=?32; ????????int?num2?=?21; ????????int?temp?=?num1?^?num2; ????????num1?=?temp?^?num1; ????????num2?=?temp?^?num1; 案例二?:?進制轉(zhuǎn)換?: ????方法一(正序打印,完全按照其在內(nèi)存的存儲方式進行顯示)?: ????????void?printBin(int?num); ????????int?num?=?3;???? ????????printBin(num); ????????void?printBin(int?num) ???????{ ??????????int?delta?=?31; ??????????for?(int?i?=?delta;i?>=?0;i--) ??????????{ ?????????????int?result?=?(num?>>?i)?&?1; ?????????????printf("%i",result); ???????? ?????????????if?(i?%?4?==?0) ?????????????{ ?????????????????printf("?"); ?????????????} ??????????} ???????printf("\n"); ???????} ????方法二(逆序打印)?: ????????void?printBin(int?num); ????????int?num?=?3; ????????????printBin(num); ????????????void?printBin(int?num) ????????????{ ????????????????int?delta?=?0; ????????????????for(int?i?=?delta;i?<?32;i++) ???????????????{ ????????????????????if?(i?%?4?==?0) ???????????????????{ ???????????????????????printf("?"); ???????????????????} ???????????????????int?result?=?(num?>>?i)?&?1; ???????????????????printf("%i",result); ???????????????} ???????????????printf("\n"); ????????????} ????????????#以上兩種方法的缺陷?:?當(dāng)數(shù)字較少,會打印大量無用的0 ????????????方法三(改進)?: ?????????????void?printBin(int?num); ?????????????int?num?=?-4; ?????????????printBin(num); ?????????????void?printBin(int?num) ????????????{ ????????????????int?count?=?0?; ????????????????while((num?>>?count)?!=?0) ????????????????{ ?????????????????????int?result?=?(num?>>?count)?&?1; ?????????????????????printf("%i",result); ?????????????????????count++; ????????????????} ????????????????printf("\n"); ???????????} */
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。