我目前正在修改考试,并在过去的论文中提出了几个问题我会坚持,并感谢您提供的任何帮助/解释! :)
以下是问题;
1。)函数power()应该实现函数n* 2^p
(printf()
行的输出应该是5*(2^2) = 20
)。使用shift运算符完成函数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。)内存被组织在称为Text,Data,Stack和Heap的区域中。下面的程序定义了变量a
,b
和c
。每个变量的内容驻留在哪个内存区域?
#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,所以如果我做错了什么就请放心!
非常感谢,
丹
答案 0 :(得分:1)
因为问题要求你展示如何使用移位操作员来操作我们的电源;不表明你知道如何使用c运行库。
a - data
b - stack
c - stack
他可能想要c-heap但事实并非如此。 c的内容在堆栈上
答案 1 :(得分: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;
答案 2 :(得分:0)
1&GT;
#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:堆栈