【C语言】第五篇·进制转换

计算机中的进制
   是一种计数方式,数值的表示形式

二、常见的进制
   二进制、十进制、八进制、十六进制

三、进制的书写形式
   二进制:0b/0B+数值
   十进制:数值
   八进制:0+数值
   十六进制:0x+数值

四、进制转换
   1.进制转换三要素:数码、基数、数位
      数码:某一进制中某一位的值
      数位:数为是指数码在一个数中的位数。注意:位数从0开始计数
      基数:每个数位上所能使用的数码的个数。即:进制数。例如:二进制基数为2,十六进制基数为16
    2.三要数之间的关系:
       数码值*基数^位数
    3.进制转换
 
  五、机器数和真值
     机器数:一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机中一个机器数的最高位存放符号位,正数为0,负数为1。
      例如:-3的机器数为:1000 0011  +3的机器数为:0000 0011

     真值:因为第一位是符号位,所以机器数的形式值(将机器数直接转换成十进制数,此时不区分符号位)不等于真正的数值。为了区别起见,机器数对应的真正数值称为机器数的真值。
     例如:-3的机器数为:1000 0011 ,10000011转换为十进制为:131(形式值),所以-3叫做其机器数的真值    

六、源码、反码、补码
     1.对于一个数,计算机要使用一定的编码方式进行存储。源码、反码以及补码是机器存储一个数的具体编码方式。
     2. 数据在计算机中的存储方式
       1)数据在计算机内部使用补码的形式,进行存储。
       2)数据分为:有符号数和无符号数。无符号数全为正数。
       3)求补码的方式
            无符号数:即正数。正数:源码 == 反码 == 补码 。
            有符号数:即有正负之分的数。正数上面的算法。负数:反码 = 除符号位的各位取反。 补码 =反码+1
       4)在各种码之间转换的过程中,注意:0没有正负之分。
    3. 为什么要引入反码、补码:
       主要是为了优化减法运算。加法为计算机基础运算,在进行减法运算时,需要让计算机识别符号位,并且要设计相关的复杂电路,为了方便,引入反码和补码,通过加法实现减法运算。

七、示例程序
1.进制转换

/* 计算机总常见的进制:二进制,八进制,十进制,十六进制 二进制:0b00001111 八进制:034 十六进制:0x34A */ #include <stdio.h> void main(){ int oNum=014; //八进制数12 int xNum=0x88; //十六进制数23 printf("八进制:%o --->十进制:%d\n",oNum,oNum); printf("十六:%x ---->十进制:%d\n",xNum,xNum); }



 
2.十进制输出一个二进制(倒序)

/ * 位运算的复合使用 先进行与1进行与运算,然后右移一位,接着与1进行与运算 原理:int 数为32位的二进制数,某一位右移该位位数位后,与&1后输出 * / #include <stdio.h> void changeToB(int x){ int i; int temp; for(i=0;i<32;i++){ temp=x; temp=temp >> i; printf("%d",temp&1); } printf("\n"); } void main(){ int num; void changeToB(int x); printf("输入一个需要转换为二进制的数:"); scanf("%d",&num); changeToB(num); }



 
 
3.判断奇偶性

/ * 利用与位运算进行判断奇偶性 奇数:二进制最后一位为1 偶数:二进制最后一位为0 * / #include <stdio.h> void fun(int x){ if(x&1){ printf("%d为奇数\n\n",x); } else printf("%d为偶数\n\n",x); } void main(){ void fun(int); int x; while(1){ printf("输入一个数:"); scanf("%d",&x); fun(x); } }



4.通过异或运算交换两数的值
      
      
/ *
  计算机总常见的进制:二进制,八进制,十进制,十六进制
  二进制:0b00001111
  八进制:034
  十六进制:0x34A
* /
#include < stdio.h>
void main(){
        int oNum=014;   //八进制数12
        int xNum=0x88; //十六进制数23
        printf("八进制:%o --->十进制:%d\n",oNum,oNum);
        printf("十六:%x ---->十进制:%d\n",xNum,xNum);
} 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值