1
a+b=0xFFFFFFFFFFFFFFFF,十六进制的F对应十进制的15,再转换成二进制则为1111。
所以a+b得1111 1111 1111 1111,二进制的首尾为符号位,1位负数,0则为正数,这里为1所以a+b的结果是负数。
负数在内存中存储以补码的形式,所以求原码的步骤为:
1.补码-1得反码(变为1111 1111 1111 1110)
2.反码按位取反得原码(1000 0000 0000 0001)
3.转换成二进制结果为-1
2
3
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态 存储区和常量存储区。
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量 的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应 用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉, 那么在程序结束后,操作系统会自动回收。
4
8086处理器(CPU)内的寄存器都是16位的,地址线上的地址由CPU提供。CPU用两个16位的值合成一个20位的值:将一个16位的值乘以16(相当于这个16位的值保存在20位寄存器的低16位中,然后将低16位往高位移动了4位)再加上另一个16位的值。将这个由2个16位合成的值提供给20根地址线作为访问内存的地址值。被乘以16的那个值被称为段基址,没有被乘以16的那个值被称为偏移地址。