C语言学习遇到的几个疑问!!!

雪域迷影 2010-07-31 08:16:44
问题1:(常量)
什么样的常量在程序运行过程期间会像变量一样,需要一定得内存空间来存放,什么样的变量不用?

问题2:(位运算操作)
有两个int型的变量a和n(0<=n<=31),要求写一个表达式,使该表达式的值和a的第n位相同。

问题3.(位运算)
有以下程序:
#include<stdio.h>

void main()
{
short n=-15;
n>>=3;
printf("n=%d\n",n);
}
在VC6.0下运行的结果为:
n=-2
请问这是为什么?

问题4:(思考题)
编写一个MyItoa函数
int MyItoa(char s[]);
其功能是将s中以字符串形式存放的非负整数,转换成相应的整数返回。
例如,如果s中存放字符串"1234",则该函数的返回值就是1234.
假设s中的字符串全是数字,且不考虑s是空串或是s太长的情况。
条用该函数的语句可以是:
MyItoa("12345");
也可以是char szNumber[]="12345";
MyItoa(sznumber);
...全文
258 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪域迷影 2010-08-06
  • 打赏
  • 举报
回复
第二题:
负数在计算机中是以补码形式存放的,
short型在C++中为有符号16位整数,
-15的补码求法是:1)取-15的绝对值15;
2)-15的绝对值的二进制形式为0000 0000 0000 0000 1111(一个short型整数占16位);
3)对0000 0000 0000 0000 1111取反得1111 1111 1111 1111 0000;
4)加1得-15的二进制补码:1111 1111 1111 1111 0001。
由于最高位(符号位)是1,右移时仍然在最高位补1,所以-15的补码右移3位后为
1111 1111 1111 1110,
对于一个有符号16位整数来说,这个二进制数就是-2

现在2,3,4题都会了,不过第一题还是不太明白,偏了点,
谢谢大家了!!!
qpx1125 2010-08-01
  • 打赏
  • 举报
回复
被const限定的变量应该也能叫常量
const int x;
占用存储空间

而1234之类的,也许机器能自动生成它们,不用去内存中取了
zmshy2128 2010-08-01
  • 打赏
  • 举报
回复
第四题:

int MyItoa(char s[])
{
if(s == NULL )
return 0;
int value = 0, sig = 1;
if(*s == '+')
++s;
else if(*s == '-')
{
sig = -1;
++s;
}
for(; *s != 0; ++s)
{
if(*s >= '0' && *s <= '9')
value = value *10 + *s -'0';
else
break;
}
return value*sig;
}
wxwlll 2010-08-01
  • 打赏
  • 举报
回复
(1)只要有东西就要占内存,不论常量还是变量!
(2)a-a&(1<<n)
(3)相当于-15除以2的3次方,注意负数取整同样是向下取整!
雪域迷影 2010-07-31
  • 打赏
  • 举报
回复
不是作业贴,这是我今天复习C语言碰到的问题,
不过有些问题我自己已经解决了,
第4题如果不用itoa该如何自己重写itoa函数呢?
eTouX 2010-07-31
  • 打赏
  • 举报
回复
常量不能改变,也不能动态分配内存
a & ( 1 << n )
注意-15在的二进制码
QEVXWYQD 2010-07-31
  • 打赏
  • 举报
回复
1.这个不太清楚。感觉应该所有的变量都应该需要内存吧?
2.(a>>n)&0x01;(按最右位为第1位)
3.C++ primer 上讲:移位操作的右操作数不可以是负数,而且必须是严格小于左操作数的值。否则,操作的效果未定义。
4.
#include <stdio.h>
#include <stdlib.h>
int MyItoa (char s[])
{
int count = atoi(s);//关键
return count;
}

int main ()
{
int count;
count = MyItoa("12345");
printf ("%d\n", count);

char szNumber[]="12345";
count = MyItoa(szNumber);
printf ("%d\n", count);
return 0;
}
qgqch2008 2010-07-31
  • 打赏
  • 举报
回复
作业贴啊
skyworth98 2010-07-31
  • 打赏
  • 举报
回复
1. 从根本上来讲,不管是变量还是常量,都需要内存空间来存储,只是存在的位置有差别。
2. 表达式的值类型是什么?a & (1 << n)貌似可以满足你的要求。
3. 请问-15在内存中是如何表示的?右移位操作是怎么操作的?如果你明白了,你问的就不是问题。
4. 貌似又是老师给的作业吧?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧