0

希望你们都度过了一个美好的夏天!

我目前正在修改考试,并在过去的论文中提出了几个问题,我一直坚持,希望您能提供任何帮助/解释!:)

以下是问题;

1.) 函数 power() 应该实现函数n* 2^p(该printf()行的输出应该是5*(2^2) = 20)。power()使用移位运算符完成函数的主体。为什么使用移位运算符而不是可用的幂函数是明智的math.h

#include <stdio.h>

int power(int n, int p) {
    << YOUR CODE GOES HERE >>
}

main () {
    printf("%d*(2^%d) = %d\n",5,2,power(5,2));
}

2.) 内存被组织在称为文本、数据、堆栈和堆的区域中。下面的程序定义了变量a和。每个变量的内容驻留在哪个内存区域?bc

#include <stdio.h>
#include <stdlib.h>

int a = 5;

int func1(int x) {
    int b=5;
}

main {
    char * c;

    c = (char*) malloc (a+1);
    func1(a);
    return 0;
}

我还有几个问题要问,但会看看这些是怎么回事!实际上我以前从未使用过stackoverflow,所以如果我做错了什么,请放轻松!

非常感谢,

4

3 回答 3

1

首先,我会让你编写自己的代码,这是最好的学习方式。但是,我将回答这些问题背后的理论......

1) 将数字 2 提高到 n 次方时,与将 2 自身相乘 n 次相同。但是乘以 2 与将数字加倍相同,计算机将它们的数字存储在以 2 为底的值中。例如,6 == 0b00110 的二进制值但是当所有位都向左移动 1 时,则 12 == 0b01100 ,与 6*2 相同。因此,例如,16 == 4^2 = 4*4 = 4*(2*2) 或二进制 16 == 0b010000 == 0b001000*2 = (0b00100)*2*2。

2) 当一个变量在所有例程之外声明时,它位于“全局”存储中,也可能称为“数据”。当一个变量在例程中声明时,它是一个“自动”变量(意味着它是自动的)并在堆栈上分配。当一个变量被显式分配时,malloc作为一个例子,它被分配在堆上。

在 C 中,指针有两个数据组件或存储元素。首先,是指针本身,它通常只使用 4 个字节。然后为数据分配任何长度的数据。再说什么将重复其他答案提供的信息!

free对于已在堆上分配的所有存储,这是一个很好的编程实践。尽管系统应该在退出时释放该存储空间main,但这并不总是得到保证,尤其是在小型或嵌入式系统上。因此,代码示例应以以下方式结束:

    free(c);
    return 0;
于 2013-08-12T20:15:56.377 回答
1

1 -

因为这个问题想让你展示如何使用 shift 运算符来发挥我们的力量;并不是要表明您知道如何使用 c 运行时库。

2

a - data
b - stack
c - stack

他可能想要 c - heap 但事实并非如此。c 的内容在栈上

于 2013-08-12T19:18:15.330 回答
0

1>

#include <stdio.h>


int power(int n, int p) 

{

return n<<p; // p is the number of bits left-shifted
}

main () 

{
printf("%d*(2^%d) = %d\n",5,2,power(5,2));
}

2>

a:数据 b:堆栈 c:堆栈

于 2013-08-12T19:56:59.230 回答