计算机原理:数组下标为什么从0开始
为了记数方便注意这个红色的0,这里是从零开始。内存地址是从0开始,如果内存上装载一个数据如int类型。一个int类型是4个字节,那么假设一个int的 data_type_size=4。那么数据的内存是连续的,那初始化5个数组就是:int[] a = new int[5],到这都很清楚吧。
base_address = 1000
那么假设首地址从1000开始,连边开5个内存地址就是:int[5]公式
a[i]_address = base_address + i * data_type_size
那么来推一下:下标:i=0 数组[0]:
a[0]_address = base_address + 0 * data_type_size
下标:i=1 数组[1]:
a[1]_address = base_address + 1 * data_type_size
最络结果是这样
i=0 { a[0] } 1000-1003i=1 { a[1] } 1004-1007i=2 { a[2] } 1008-1011i=3 { a[3] } 1012-1016i=4 { a[4] } ...
计算机原理-原码、补码、反码
简述二进制数字表示法三兄弟:
原码
补码
反码
原码就是原来的编码,就是字面意思,而补码和反码比较奇怪,为什么需要这两种编码,意义是什么?
原码原码表示法,正数没有区别,负数首位为1。3的原码 0000 0011-3的原码 1000 0011
这个就这么简单,没什么可说的。
补码这个是操作系统在对负数进行计算时的一种策略。作用:解决二进制下表示负数的问题。
为什么需要补码,是什么情况下需要使用到补码。不用行不行?不行因为使用两个原码做加法,没法运算!!
不用行不行?不行,不用玩不了。因为两个原码在二进制下无法做加法!!
使用二进制的第一位表示数字的正负位:0表示正数,1表示负数。
原码加法原码之间无法直接进行计算,举个反例
2 + (-2) 结果应该是0,但是如果直接使用原码进行计算,结果溢出
12340000 00101000 0010---------1000 0100
结果期望是: 0实际为: -4
现在解释为什么需要补码为了得到正确的计算结果!!如何能得到正确的计算结果?
再举个例子,这次是正确的例子: 2 + (-2) = 0转换成二进制:
12340000 0010? ...