您好,登錄后才能下訂單哦!
/*語言中進制表示?: ????二進制表示?:?在二進制數字前面加上0b; ????八進制表示?:?在八進制數字前面加上0; ????十六進制表示?:?在十六進制前面加上0x; 進制轉換?; ????將其他進制轉換成八進制?:?在printf函數中以%o占位; ????將其他進制轉換成十六進制?:?在printf函數中以%x占位; ????在C語言中,沒有占位符可將其他進制轉換成二進制; ????將其他進制轉換成十進制?:?在printf函數中以%i或%d占位; 進制轉換的原理公式?:?假定m為一個十進制數,轉換成nk,nk-1,nk-2,...,n2,n1,n0的l進制數 ?????????????????????則?m?=?n0?+?n1?*?l^1?+?n2?*?l^2?+?....?+?nk-2?*?l^(k-2)?+?nk-1?*?l?^(k-1)?+?nk?*?l^k ?????????????????????由上可見,當等式左右兩端同時除以l時,余項為n0,在整數部分除以l則余項為n1,以此類推,便可以得到m的l進制表達 案例:十進制轉換二進制(逆序打印) #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 二進制轉八進制?:?三位變一位 二進制轉十六進制?:?四位變一位 原碼?反碼?補碼 ????數據內存中均是以補碼形式存儲,正數的原碼,反碼,補碼全部一樣,三碼合一 ????原碼?:?最高位為符號位(正數為0,負數為1),其他位則為數字位 ????反碼?:?負數的反碼,最高位符號位不變,數字位取反 ????補碼?:?負數的補碼,反碼加1 位運算符?: ????按位與?:?&????#數字轉換成二進制后,對應位,全真則真,由此可見,任何數字和1的按位與還是數字本身????#注?:?可用此法結合移位運算進行進制轉換 ????按位或?:?|????#數字轉換成二進制后,對應位上,一真則真,由此可見,任何數字和0的按位或還是數字本身 ????按位異或?:?^????#數字轉換成二進制后,對應位上,相同則取0,不同則取1.相同的兩個數字按位異或結果為0,且按位異或滿足交換律????#應用?:?交換兩個變量的值 ????取反?:?^????#取反操作,是直接對存儲在內存中的補碼進行取反,因此要獲得數字本身,還需將其轉換成原碼之后,再計算 ????左移?:?<<????#將二進制整體左移n位,缺位補0,相當于原來的數字乘以2^n ????右移?:?>>????#將二進制除了符號位之外整體右移n位,缺位按照符號位的取值進行補齊,相當于原來的數字乘以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; 案例二?:?進制轉換?: ????方法一(正序打印,完全按照其在內存的存儲方式進行顯示)?: ????????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"); ????????????} ????????????#以上兩種方法的缺陷?:?當數字較少,會打印大量無用的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"); ???????????} */
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。