一、引言
数据在计算机中是以二进制形式存储的
1、无论负数还是非负数在计算机中都以补码的方式存储
2、不过非负数在计算机中的补码跟原码一样
3、八进制以原码存储
4、十六进制以原码存储
二、进制
进制也就是进位制,是人们规定的一种进位方法
对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位
十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位
十进制 | 二进制 | 八进制 | 十六进制 |
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
16 | 10000 | 20 | 10 |
三、二进制
1.二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”
2.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的
3.十进制转化二进制的方法:
用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
例如,十进制20的二进制为 10100
四、八进制
1.八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。
2.一些编程语言中常常以数字0开始表明该数字是八进制
3.八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中
4.八进制和二进制互转:
二进制转八进制:
八进制数转二进制数:
同理,只需要将一位8进制数划分为三位二进制数即可,如:
十进制转化八进制的方法:
用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
(跟二进制转十进制方法一样,参考上面。)
五、十六进制
1.六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写
2.与10进制的对应关系是:0-9对应0-9,A-F(或a-f)对应10-15
3.十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位),因此常应用在计算机语言中
4.十六进制和二进制互转:
二进制转十六进制(跟二进制转八进制方法一样,不过这里四位二进制数转一位十六进制数)
十六进制转二进制(跟八进制转二进制方法一样):
十进制转化十六进制的方法:
用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
(请参考十进制转二进制)
六、c语言如何响应的进制数
十进制 | 以正常数字1-9开头,如15 |
八进制 | 以数字0开头,如017 |
十六进制 | 以0x或0X开头,如0xf |
二进制 | 以0b或0B开头,如0b1111 |
用下面的代码段的测试来演示:
七、数值的存储方式
计算机底层都是存储数据都是采用二进制,但二进制也有几种,比如:原码、反码、补码。
原码
十进制数按照:除二取余、倒序排列,得到的就是原码。
10 -> 0000 1010
-10 -> 1000 1010
-1 -> 1000 0001
1 -> 0000 0001
反码
反码的计算规则如下:
正数的反码就是原码本身
负数的反码是按位取反(但符号位不变)
eg:
1 -> 0000 0001 -> 0000 0001
-1 -> 1000 0001 -> 1111 1110
补码
正数的补码就是原码本身
负数的补码就是在反码的基础上+1
1 -> 0000 0001 -> 0000 0001 -> 0000 0001
-1 -> 1000 0001 -> 1111 1110 -> 1111 1111
移码
补码符号位取反就是移码,一般用来计算浮点数作为阶码和比较数的大小使用。
十进制数 | 补码 | 移码 |
+15 | 0000 1111 | 1000 1111 |
-15 | 1111 0001 | 0111 0001 |
+0 | 0000 0000 | 1000 0000 |