完成大一的计导大作业(冯诺依曼式的CPU模拟器)时遇到的问题

1.int到底占几个字节?int的范围?

-2^31—— -2^31-1,即-2147483648——2147483647,可以有负数。
一般的答案是4个字节,你记4个字节就可以,但是和编译器有关,实在不行可以sizeof(int)试一下。

位与字节的关系,32k内存是什么意思?

位(比特位) bit
字节 byte
8位=1字节
也就是8bit=1byte
1字节 = 1 B =1 byte
1 KB = 1024B =2^10B
32K=32KB=322^10 B=163842B

补码与原码的区别,普通转换,简单转换

1.认识补码
补码第一位为符号位,符号位为0,则代表正数,符号位为1,则代表负数。

两个说法都没有错,我们举个例子来看看就明白了:
1、10001的补码是取反后在再加1,也就是11110+1=11111;
2、如果是抄11111变回原码呢?我们可以采取逆过程先减1,11111-1=11110,再取反变为10001;
3、如果要是在补码变原码时先去反再加一呢?(就是问题中的说法)结果为11111先取反为10000,再加1,10000+1=10001。这个结果与2是一样的,并且也是和1中的原码相吻合。
通过上述例子可以看出,无论是原码变补码还是补码变原码,都可以采取先取反再加1的方法。至于原因是很容易想通的。
按照正常思维来想的话,补袭码变成原码应该是原码变补码的逆过程,也就是2步中的方法。但是我们可以思考一下,如果我们没有按照2步中的方法而是先去取反了呢?先取反得到的结果和2步的结果有什么差异呢?答案是差了1,2步中是先减1才取的反,而直接取反的话,就没有减1。
接着请注意,在取反前zd减1和在取反后加1的效果是一样的。这就和-3-1=-(3+1)是一个道理。
所以问题中的说法没有错误。

&和&&的比较

同:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
异:
1
&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,效率更高。
2
&可以进行按位与运算
就是二进制的每一位相与。
比如:1010 0011& 0000 1111,结果为0000 0011.

二维数组怎么传给函数

一维数组的传递
函数头void F(int*)或者 void F(int a[])
二维数组的传递
类比一维数组
函数头void F(int**)或者
void F(int a[][])
那你就错了姐妹!
因为二维必须传第二个数组大小
函数头void F(int a[][3])必须指明二维的长度或者void F(int (*a)[3])那么这个F函数就只能被二维长度为3的数组用,a[2][4]不能用这个函数,调用这个函数的时候,实参应该是一个二维数组的名字。

函数头和函数原型的关系

函数头:顾名思义,就是函数的头,函数体开始之前的那一句,这里要指明行参的类型和参数名。
函数原型:写在最开始的声明,要调用先声明。这里只需要指明形参的类型,不需要参数名,因为以后多次调用可以传不同的参数名。当然加了参数名也可以。编译器会忽略参数名,只关注参数类型,下边调用的时候也可以传不同与函数原型的参数名,函数原型结尾需要加个分号。

你可能感兴趣的:(完成大一的计导大作业(冯诺依曼式的CPU模拟器)时遇到的问题)