正数的补码怎么求 正数的补码

正数的补数(如何求正数的补数)
冯诺依曼系统结构计算机处理的所有数据和指令都用二进制数表示 。
在计算机运行的过程中,要执行的程序和处理过的数据首先存储在主存储器(内存)中 。当计算机执行程序时,它会自动地、顺序地从主存中取出指令,并逐一执行 。这个概念叫做顺序执行程序 。
硬件由五部分组成:运算器、控制器、存储器、输入设备和输出设备 。
数据的内置表示二进制表示法计算机中的数字必须用二进制数字串来表示,就像数字一样 。因此,符号也必须用0和1来表示 。最高位0表示正,1表示负,sign的这种数字内部表示称为“机器号”,而sign在机器外部表示的对应数称为“真值”,将一个真值表显示为二进制字符串的机器号的过程称为编码 。
原始代码是符号位加上真值的绝对值,即第一位代表符号,其余位代表值 。例如,如果是8位二进制:[+1]original = 0000001[-1]original = 1000001,第一位是符号位 。因为第一位是符号位,所以8位二进制数的取值范围是:【1111 1111 。
反码的表示方法是:正数的反码是其自身负数的反码,以其原码为基础,符号位不变,其余位倒置 。[+1]=[00000001]Original =[0000001]Inverse[-1]=[1000001]Original =[1111110]
补数的表示方法是:正数的补数是其自身负数的补数,以其原码为基础,符号位不变,其余位反转,最后+1 。(即在其补码的基础上+1)[+1]=[00000001]original =[0000001]anti =[000001]complement[-1]=[1000001]original =[1111110]anti =[1111111]
定点和浮点定点是小数点固定的数字 。电脑里没有小数点专用的位,默认约定小数点的位置 。一般固定在机器号最低位之后或符号位之后 。前者叫定点纯整数,后者叫定点纯小数 。定点表示简单直观,但数值表示范围过小,操作时容易溢出 。
浮点数是小数点位置可以改变的数字 。为了扩大数值表示的范围,防止溢出,采用了浮点表示 。浮点记数法类似于十进制中的科学记数法 。
浮点数在计算机中通常分为顺序码和尾数,其中顺序码一般用补码定点整数表示,尾数一般用补码或原定点小数表示 。为了保证有效位不丢失,尾数进行了归一化处理,即通常的科学记数法,即尾数最高位为1,实际值用顺序码调整 。
顺序符号表示指数的符号位,顺序代码表示幂,数字符号表示尾数的符号位,尾数表示归一化的十进制值 。
N =尾数×基数顺序码(指数)
位、字节、字比特:“比特”是电子计算机中最小的数据单位 。每个位的状态只能是0或1 。
字节:八个二进制位构成一个“字节”,是存储空之间的基本计量单位 。一个字节可以存储一个英文字母或者半个汉字,换句话说,一个汉字占用2个字节空的存储空间 。
字:“字”由若干字节组成,字数称为字长 。不同等级的机器字长不同 。例如,对于8位计算机,一个字等于一个字节,字长为8位 。如果是16位计算机,那么它的字由2个字节组成,字长为16位 。字是计算机数据处理和运算的单位 。
字节顺序字节序是指一种以上字节类型的数据在内存中的存储顺序,通常有小端和大端两种字节序 。
小字节顺序是指低字节数据存储在内存的低地址,高字节数据存储在内存的高地址;
大端意味着高字节数据存储在低地址,低字节数据存储在高地址 。
基于X86平台的PC是小端,有些嵌入式平台是大端 。所有的网络协议也使用big endian来传输数据 。所以有时候我们也把大端法叫做网络字节序 。
例如,数字0x12345678在两个不同字节顺序的CPU中的存储顺序如下:
BigEndian低地址高地址---------------------------------------------------->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|12|34|56|78|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+LittleEndian低地址高地址---------------------------------------------------->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|78|56|34|12|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+从上面两张图可以看出,使用Big Endian存储数据是符合我们人类的思维习惯的 。
union的存储顺序是所有成员从低位地址开始存储 。利用这个特性,可以判断CPU是以小端还是大端模式读写内存 。
示例代码如下:
uniontest{shorti;charstr[sizeof(short)];}tt;voidmain(){tt.i=0x0102;if(sizeof(short)==2){if(tt.str[0]==1&&tt.str[1]==2)printf("大端字节序");elseif(tt.str[0]=2&&tt.str[1]==1)printf("小端字节序");elseprintf("结果未知");}elseprintf("sizof(short)=%d,不等于2",sizeof(short));}字节对齐在现代计算机中,内存空是按字节划分的 。从理论上讲,似乎对任何类型变量的访问都可以从任何地址开始,但实际上在访问特定类型的变量时,往往是在特定的内存地址进行访问,这就需要将各种数据按照一定的规则排列在内存空中,而不是一个一个地排出,这就是对齐 。

推荐阅读