C语言-进制

本文目录
一、十进制
二、二进制
三、八进制
四、十六进制
五、进制总结
六、变量与进制
七、printf的简单使用
上一讲简单介绍了 常量和变量,这讲补充一点计算机的基础知识---进制。
我们先来看看平时是如何表示一个整数的,最常见的肯定是用阿拉伯数字表示,比如“十二”,我们可以用12来表示,其实这种表示方式是基于一种叫做“十进制”的计数方式。“进制”是一种计数方式,编程中常见的进制有4种:十进制、二进制、八进制、十六进制。也就是说,同一个整数,我们至少有4种表示方式。
回到顶部
一、十进制
1. 概念
十进制是我们最熟悉、最常用的一种计数方式,它有两个特点:由0、1、2….9十个基本数字组成;运算规则是“逢十进一”。
 
2. 运算
所谓“逢十进一”,似乎在小学数学中都已经学过了,也就是当数值满十时,就要向前进一位
 
个位数为9+1,满十了,十位数就进一。
 
回到顶部
二、二进制
1. 概念
二进制是计算机内部使用的一种计数方式,它有两个特点:由0、1两个基本数字组成;运算规则是“逢二进一”。
 
2. 细节
1> 有人可能会问:为什么二进制里面没有2~9这些数字呢?都说了,逢二进一,因此当数字满二的时候就会进位。
2> 如果我写个1010,你能看出它是二进制还是十进制么?为了跟其他进制区分开来,书写二进制数的时候,需要以0b或者0B开头。比如0b1010是个二进制数,而1010则还是我们熟悉的十进制数,就是“一千零一十”
 
3. 运算
做个简单的运算吧,比如1+1
 
个位数是1+1,值满二了,于是十位数要进一。因此,在二进制中:1 + 1 = 0b10,这里的0b10表示的是十进制中的“二”,并不是“十”。
 
以此类推,11 + 1 = 0b100
 
 
4. 二进制转为十进制
1> 用二进制表示数值,虽然简单、方便,但是不容易阅读,比如随便给出个二进制数0b110111101010,你能立刻看出它表示的是什么数值吗?一般需要将二进制数转为十进制数后才能知道代表的什么数值。
进制里面有个“基数”的概念,基数是用来计算数值的,比如十进制的基数是10,因此十进制是这样算数的:
1230 = 0 * 10 0 + 3 * 10 1 + 2 * 10 2 + 1 * 10 = 0 * 1 + 3 * 10 + 2 * 100 + 1 * 1000
二进制的基数是2,以此类推:
0b1011 = 1 * 2 0 + 1 * 2 1 + 0 * 2 2 + 1 * 2 3 = 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11
因此二进制数0b1011表示的数值是十进制中的11
 
2> 一位二进制数能表示的最大值是1,而n位二进制数所能表示的最大值是0b111...1111,也就是说n位二进制数都是1,那么它的十进制数值为:
1 * 2 0 + 1 * 2 1 + 1 * 2 2 + 1 * 2 + .... + 1 * 2 n-1 = 2 n - 1

因此,n位二进制数所能表示的最大值是2 n - 1。也就是说,4位二进制数能表示的最大值是0b1111,十进制数值为:2 4 - 1 = 15;5位二进制数能表示的最大值是2 5 - 1 = 31。
 
回到顶部
三、八进制
1. 概念
八进制有两个特点:由0~7八个基本数字组成;运算规则是“逢八进一”。
 
2. 细节
由于十进制和八进制中都包含了0~7,为了区分开来,在书写八进制数的时候,需要在前面加个0。比如076是个八进制数,76则是个十进制数。
 
3. 运算
 
个位数是7+1,值满八了,于是十位数要进一。因此,在八进制中,7 + 1 = 010。010则表示十进制中的“八”,而不是“十”
 
4. 八进制转十进制
八进制的基数是8,因此027计算出来就是十进制中的23
027 = 7 * 8 0 + 2 * 8 1 = 7 * 1 + 2 * 8 = 23
 
5. 二进制转八进制
不难发现一个十进制数可以表示的最大值是9,而一个八进制数可以表示的最大值是7,恰好3个二进制数可以表示的最大值0b111也是7。因此,我们可以用一个八进制数来代替3个二进制数。
0b11110011 = 0b 011  110  011  = 0363
如果是八进制转为二进制,那就反过来,用3位二进制数来表示1位八进制数
025 = 0b 010  101  0b10101
 
回到顶部
四、十六进制
1. 概念
十六进制有两个特点:由0~9和A~F组成,A~F分别表示10~15;运算规则是“逢十六进一”。
 
2. 细节
由于十进制、八进制、十六进制中都包含了0~7,为了区分开来,在书写十六进制数的时候,需要在前面加个0x或者0X。比如0x76是个十六进制数,076是个八进制数,76则是个十进制数。
 
3. 运算
 
个位数是B+5,也就是11+5,值满十六了,于是十位数要进一。因此,在十六进制中,B + 5 = 0x10。0x10则表示十进制中的“十六”,而不是“十”
 
4. 十六进制转十进制
十六进制的基数是16,F表示十进制中的15,因此0x2F计算出来就是十进制中的47
0x2F = 15 * 16 0 + 2 * 16 1 = 15 * 1 + 2 * 16 = 47
 
5. 二进制转十六进制
一个十六进制数可以表示的最大值是15,恰好4个二进制数可以表示的最大值0b1111也是15。因此,我们可以用一个十六进制数来代替4个二进制数。
0b11110011 = 0b 1111  0011  = 0xF3
如果是十六进制转为二进制,那就反过来,用4位二进制数来表示1位十六进制数
0x25 = 0b 0010  0101=0b100101
 
回到顶部
五、进制总结
1.一个整数“十二”的4种表示方式分别如下:
十进制:12
二进制:0b1100
八进制:014
十六进制:0xC
 
2.其实也可以利用Mac中的计算器软件来测试进制之间的转换。
设置计算机的显示模式为“编程器”
先选择10进制,然后输入12,底部显示的二进制数为1100,这里省略最前面的0b
选择八进制,显示为14,这里省略了最前面的0
选择十六进制,显示为 0xC
六、变量与进制
1.上一讲学习了 变量的使用,简单回顾一下
1int main()
2{
3int a = 10;
4return0;
5 }
在第3行定义了一个变量a,存储的是十进制整数10。其实,这个变量a在内存中是以二进制数的形式存储的,10的二进制形式是1010。
2.除了十进制整数,还可以将其他进制的整数赋值给整型变量
int main(){
 int a = 0b110; // 十进制数:6 4 5int b = 021; // 十进制数:int c = 12; // 十进制数:12 8 9int d = 0x1D; // 十进制数:291011
return0;
}
上面的代码中,分别将4种不同进制的数值赋值给不同的整型变量。对应的十进制数值已经写在右边的注释中。它们最终都是以二进制的形式存储在内存中。

转载于:https://www.cnblogs.com/GhostKZShadow/p/5105215.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值