进制转换计算
二进制
二进制数据是用0和1两个数码来表示的数,C语言中以0b或0B开头。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。
十进制转二进制方法:
十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
-
八进制
-
八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。以 0 开头。
-
八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中,八进制和二进制互转方式如下:
十进制转八进制的方法:
用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。
十六进制
十六进制(英文名称:Hexadecimal),在C语言中以0x开头表示,同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写。
10进制的对应关系是:0-9对应0-9,A-F(或a-f)对应10-15。十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位),因此常应用在计算机语言中。
十六进制和二进制互转
十进制转化十六进制的方法
十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
数值存储方式
原码
- 最高位做为符号位,0表示正,为1表示负
- 其它数值部分就是数值本身绝对值的二进制数
- 负数的原码是在其绝对值的基础上,最高位变为1
- 下面数值以1字节的大小描述
十进制数 | 原码 |
---|---|
+15 | 0000 1111 |
-15 | 1000 1111 |
+0 | 0000 0000 |
-0 | 1000 0000 |
反码
- 对于正数,反码与原码相同
- 对于负数,符号位不变,其它部分取反(1变0,0变1)
- 下面数值以1字节的大小描述
十进制数 | 反码 |
---|---|
+15 | 0000 1111 |
-15 | 1111 0000 |
+0 | 0000 0000 |
-0 | 1111 1111 |
补码
-
在计算机系统中,数值一律用补码来存储
-
对于正数,原码、反码、补码相同
-
对于负数,其补码为它的反码加1
-
- 负数的补码符号位不动,其他位求反,最后整个数加1,得到原码
-
下面数值以1字节的大小描述
十进制数 | 补码 |
---|---|
+15 | 0000 1111 |
-15 | 1111 0001 |
+0 | 0000 0000 |
-0 | 0000 0000 |
移码
- 补码符号位取反就是移码,主要用来比较数的大小
- 下面数值以1字节的大小描述
十进制数 | 补码 |
---|---|
+15 | 1000 1111 |
-15 | 0111 0001 |
+0 | 1000 0000 |
-0 | 1000 0000 |