原码、反码、移码、补码
原码
-
也叫 符号绝对值码
-
最高位0表示正数,1表示负数,其余二进制位是该数字的绝对值的二级制位
-
原码较为简单,但是加减运算复杂
-
存在加减乘除四种运算,增加了CPU的复杂度
-
0的表示不唯一
反码
-
正数的反码等于原码
-
负数的反码是其原码除符号位外,按位取反
移码
-
移码表示数值平移n位,n为移码量
-
移码主要用于浮点数的阶码的存储
补码
-
已知十进制求二进制
-
求正整数的二进制
-
求负整数的二进制
-
先求与该负数相对应的正整数的二进制代码
-
在将所有位取反,末尾加1,不够位数,左边补1
-
求0的二进制
-
已知二级制求十进制
-
如果首位是0,则表明是正整数,按正常方法求
-
如果首位是1,则表明是负整数,将所有位按位取反,末尾加1,所得数字为该负数的绝对值
-
如果全是0,则对应的十进制数字就是0
#include<stdio.h>
int main()
{
/*
***已知十进制求二进制 -5
5的二进制是0101
取反:1010+1=1101 16进制表示为B 前面全1即7个F
*/
int i = 0xFFFFFFFB;
printf("%d\n",i);
int j= -5;
printf("%#X\n",j);
/*
已知二进制求十进制
1110101 前面全部补1来测试 :7个F 1个5
取反
0001010+1=0001011 十进制为11
鉴于是1开头所以是-11
*/
int m = 0XFFFFFFF5;
printf("%d\n",m);
char ch = 129;
printf("%d\n",ch);
/*char占一个字节 8位
8位最多存储011111111(127)+1 溢出
= 10000000(-128)+1
10000001
最高位为1,负数,取反+1
=01111110+1
=01111111(127)为该负数的绝对值
该数为-127
*/
}
![image-20200531211852444](https://i-blog.csdnimg.cn/blog_migrate/88fdfaea286b05f3645d9d205568d900.png)
补充
二进制 | 十进制 |
---|
0000 0000 | 0 |
0000 0001 | 1 |
… … | … … |
0111 1111 | 127 |
1000 0000 | -128 |
1000 0001 | -127 |
1000 0010 | -126 |
… … | … … |
1111 1111 | -1 |