C语言之进制转换
/*语言中进制表示 : 二进制表示 : 在二进制数字前面加上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进制表达 案例:十进制转换二进制(逆序打印) #includevoid 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"); } */
网站题目:C语言之进制转换
网址分享:http://azwzsj.com/article/jihsjs.html