进制转换/码制转换和计算机大端和小端模式

十六进制和二进制之间的转换

十六进制由0-9和A-F组成,对应于十进制的0-15,对应于二进制为4位;故十六进制和二进制之间的转换比较直接,示例如下:
1. 将二进制转换为十六进制:每4个二进制位为一个段转换为相应的十六进制,如: 二进制数(0001 0010 0011 0100)转换为十六进制数(0x1234);
2. 将十六进制转换为二进制:每个十六进制位对应4个二进制位,直接进行转换,如:十六进制数(0xFD159B)转换为二进制数(1111 1101 0001 0101 1001 1011);
故每两个十六进制位为1个字节,即8位;

八进制和二进制之间的转换

八进制由0-7组成,对应于十进制的0-7,对应于二进制为3位;故八进制和二进制之间的转换也比较直接,示例如下:
1. 将二进制转换为八进制:每3个二进制位为一个段转换为相应的一个十六进制位,如:二进制数(0001001000110100),分段后为(0 001 001 000 110 100),转换为八进制数(011064);
2. 将八进制转换为二进制:每个八进制位对应3个二进制位,直接进行转换即可,示例略;

十进制转换为二进制/八进制/十六进制采用除法取余的方式;二进制/八进制/十六进制转换为十进制采用加权乘积之和的形式;

码制转换之原码/反码/补码

原码:

如果机器字长为n,则一个数的原码就是一个n位的二进制有符号数,其中,最高位为符号位,0表示正数,1表示负数。剩下的n-1位为数值位,表示真值的绝对值。凡是不足n-1位的,小数在最低位右边补零,整数在最高位左边补零。示例如下:

X=+101011,X的原码为:0010 1011,X=-101011,X的原码为:1010 1011
注意:正数的原码、反码和补码都一样;

反码:

正数的反码是其本身,负数的反码即是在原码的基础上符号位保持不变,其他位按位取反即可;
示例;X=-101011,X的原码为:1010 1011,X的反码为:1101 0100;

补码:
正数的补码是其本身,负数的补码即是在其反码的基础上加1即可;

移码:
不管是正数还是负数,在补码的基础上按位取反即可;

总结:在计算机中,正数是用其原码表示的,也可以说是补码,因为正数的原码和补码相同;负数是用其补码表示的;比如:5在计算机中表示为:(0000 0101);-5在计算机中表示为:(1111 1011);

计算机大端模式和小端模式

所谓大端模式即是内存的低地址空间存储数据的高位,高地址空间存储数据的低位;内存由低到高访问时,首先碰到的是数据的高位,类似于将数据当做字符串;而小端模式则刚好相反;
小端是低位在低字节,高位在高字节;示例:
0x12345678,在大端模式中,高位为0x12,在小端模式中,高位为0x78;注意均为1个字节;

你可能感兴趣的:(C++基础)