C语言基础:进制

一、进制介绍

计算机中的进制二进制  八进制    十进制    十六进制

十进制  :  0-9 的字符组成的.

例子:   100000000 

二进制 01两种字符组成的.  

例子 :  0b10       

八进制 0 - 7 八种字符组成的.

例子 :  0755

十六进制  :  0-9   a-f十六种字符组成的.

例子 :  0xff


二、进制转换

1、[二进制   十进制]

0b10010  ==  18

=1x2^1   +  1x2^4

= 2    +   16

= 18

[转换方法]  二进制数 右边为低位数据,左边为高位数据从右往左看 依次是第0,1,...每一位数据乘以对应自己的2的位数次方.然后相加得到十进制结果.


2、[十进制   二进制]

18  == 0b10010

[转换方法]   2

[我们之所以要学习二进制和十进制之间的相互转换,是因为二进制是计算机中数据的表达方式. 但是 十进制却是我们人类表示数据的常用方式.为了能和计算机交互,为了能更清楚的了解计算机的工作原理,我们必须搞清楚二进制和十进制之间的相互转换.

[二进制 书写起来对于程序员来说不容易看懂. 十进制 二进制过程比较繁琐所以引入 八进制和 十六进制.


3、[二进制  八进制/十六进制]

0b10010  ==  022

= 010  010 

= 2  2

=022


0b10010 == 0x12

=0001  0010

=1  2

=0x12


0b11100 == 0x1c

=  0001 1100

=  1  c

= 0x1c

[转换方法二进制 八进制   , 采用[三位一取],从右往左,每三位作为一组,最高位不够补0 ,每一组转换为对应的十进制数对应的八进制字符

二进制 十六进制 , 采用 [四位一取],从右往左,每四位作为一组,最高位不够补0,每一组转换为对应十进制数对应的十六进制字符.



4、[八进制/十六进制 二进制]

022 == 0b10010

=010   010

=0b10010

[八进制 二进制  ]   [一位变三位] ,八进制数的每一位转换为对应二进制数的三位.


0x22 == 

=0010  0010

=0b100010


0x12

= 0001 0010

=0b10010

[十六进制 二进制 ]  [一位变四位],十六进制数的每一位转换为对应二进制数的四位.


[二进制,八进制,十进制,十六进制,这四种进制只是对于同一个整数的不同表现形式.

[八进制/十六进制 十进制之间的相互转换,需要借助二进制来实现.

//二进制数在代码中是以0b开头的.
    //没有二进制数对应的数据输出格式
    printf("%d\n",0b10);// %d是十进制的数据输出格式
    printf("%d\n",0b10010);
    
    //八进制在代码中是以0开头的.
    //数据输出格式为: %o
    printf("%o\n",022);
    printf("%d\n",022);
    
    //十六进制在代码中是以0x开头的.
    //数据输出格式为: %x
    printf("%x\n",0x12);
    printf("%d\n",0x12);


三、进制应用

1、[十六进制的应用]   -- 颜色表示


0000 0000 == 0           


1111 1111  == 255


#FFFFFF   == 白色


#000000  == 黑色


#FF0000  == 红色


#AAAAAA  == 浅灰色


#222222   == 深灰色


2、[八进制的应用] --文件权限


在类似Unix 系统下(mac)所有的东西都当做文件看,每个文件都有固定的权限

这个权限决定了拥有这个文件的用户所能进行的操作.


      r (read)

      w(write)

执行  x (excute)


一个文件的权限分 三组,每一组都可能有读,,执行权限.


rwx r-x r-x

111       101      101

7              5           5

0755


第一组: 文件所有者的权限

第二组: 所有者所在小组其他成员的权限

第三组: 其他组成员的权限


[]使用chmod 命令可以更改文件的权限


ytf:~ mac$  chmod  0755 ceshi




四、二进制形态

计算机是以二进制的形式来数据存储,数据运算的.二进制有三种形态 :原码  反码 补码


1、

计算机中 8个二进制位组成一个字节

1024字节 == 1KB

1024KB == 1MB

1024MB == 1GB     

1024GB == 1TB


2、[原码]

[程序中任何一个数据都必须存储在固定大小的内存单元中]

[计算机所能分配的最小的内存单元为1个字节]


[]  对于一个数据,如果用二进制的原码形式表示.最高位为符号位,其余位表示这个数据的绝对值大小.

正数的符号位为  0

负数的符号位为 1


0000  0011   1个字节 3的原码

1000  0011          1个字节的 -3的原码


0000  0011      3

1000  0011      -3    +

----------------------------

1000  0110      -6  


[结论]  计算机不以二进制 的原码来进行数据存储,数据运算.

[原因]  原码 无法正确运算



3、[反码]

正数的反码和原码一样.负数的反码是原码的符号位不变,其他位取反(10,01)

0000 0011    1字节的3的反码

1111 1100    1字节的 -3的反码


0000 0011     3

1111 1100      -3    +

----------------------------

1111 1111      


[结论]  计算机不以二进制 的反码来进行数据存储,数据运算.

[原因]  反码 无法正确运算


4、[补码]


[]  正数的补码和原码,反码一样

负数的补码是反码加1


0000 0011    1字节的3的补码

1111 1101       1字节的-3的补码


0000 0011    3的补码

1111 1101    -3的补码   +

---------------------------------

0000 0000     0的补码


[结论]  计算机是以二进制 的补码来进行数据存储,数据运算.

[原因]  补码 可以正确运算







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值