| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2581 人关注过本帖
标题:关于char的深入研究
只看楼主 加入收藏
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
结帖率:97.78%
收藏
 问题点数:0 回复次数:24 
关于char的深入研究
  大家好,我学C语言已有好几个月的时间了,自己也做过一些小功能的程序,自己用的蛮舒服的.在设计这些程序的时候,有一些程序要涉及到类似于开关变量.就是说只可能等于0或者1的一个开关变量,就是说判断用的.如果这是1就怎么样,如果是0又怎么样..这种程序,我以前一直使用的是int类型的(大家请不要说废话,更不要点击右上角的小叉叉关掉,请看完这片短小的文章,肯定会有收获的!),这几天我想学一下单片机,认为可能可以使C语言在位运算的操作中更加的娴熟.到电脑城要我爸爸(我现在14岁)买了一张"十天征服单片机"今天开始学.
  听了很久的理论知识,然后就开始讲C-51(他说是C语言,不过和普通的有一点区别.),第一节课讲得是类型,说了int是在几几几到几几几之间,long是.....char 是-128~127.听到这里,我就想到了一个有用的东西,可以节省一些内存空间.就是说上面所说到的开关语句可以使用char来表示,可以节省一个字节.看似不大,但是我相信大程序肯定能够节省很大的空间的!然后一些可以百分之百确定大小不会超过127的也可使用char来定义变量.然后如果说会超过的话,你还可以考虑一下unsigned char 这个的范围在0~255之间,也是一个字节,就是所谓的无符号字符型.
  我自己先举一个例子,用递归求阶乘的
程序代码:
#include <stdio.h>
#include <conio.h>
long jc(char i){
  if(i==1)
    return 1;
  else
    return jc(i-1)*i;
}
int main(void){
  char i;
  printf("请输入求几的阶乘:\n");
  scanf("%d",&i);
  printf("%ld",jc(i));
  getch();
  return 0;
}
  肯定不能输入大于100的数字啦,那早就超标了,所以就可以使用char来表示,而是用递归的原因是,每一次执行函数会临时在内存中声明一次,当然,函数结束后肯定是会消失的,但是先不考虑这个.比如说我输入的是5,那当它到1的时候,就定义了5个变量,如果我使用的是int来定义的话,那就会比char增加5个字节,如果我输入更大,那就会多增加更多的字节,反之.使用char可以节约一些内存空间.
  咋样?反正对我自己来说是一份新的收获!很好类..

[[it] 本帖最后由 zqy110007 于 2008-12-13 17:22 编辑 [/it]]
收到的鲜花
  • 广陵绝唱2008-12-13 18:06 送鲜花  49朵   附言:态度认真奖。
搜索更多相关主题的帖子: char 研究 
2008-12-13 16:11
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
自己先顶一个!
这真正的叫做温故而知新!

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-13 16:12
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
看在你还是小孩的身份上我就不打击你了,提下建议:
1.只能取0或者1的变量叫做布尔变量,以纪念伟大的数学家Boolean,可以看看这个:
http://baike.baidu.com/view/27896.htm
2.改用char还是int存储布尔值的问题,我的意见是最好使用内置的布尔类型,以提高程序的可读性和规范性,减少错误出现的概率。如果使用古老的C编译器不支持最新的C语言标准,那么就遵循尽量使用int类型的原则,因为int类型通常是cpu处理起来最快的类型。至于说char省空间,除非大量使用否则一两个字节根本无所谓。补充材料:
直到C99标准C语言才内置布尔类型_Bool,包含stdbool.h后方便解决C++代码中的bool类型问题。
Boolean Types
In C++, the Boolean type is bool, and true and false are keywords. In C, the Boolean type is _Bool, but including the header file stdbool.h makes bool, true, and false available.

3.看来你已经打算学单片机了,我告诉你从8位的51玩到32位的ARM根本不是难事,也没有太多的技术含量。8位到16位的MCU的开发软件部分都不是重点,重点在外围电路的设计,等你以后学完大堆的电子类课程再学也不迟;至于32位的ARM的开发重点则是嵌入式的OS和应用软件的开发,等你有能力学linux内核时再入手也不迟。
所以,你现在学单片机不是最好的选择,只是当做玩具也没什么。建议你学好数学和英语这些基础,买一本《C primer plus》把C学好,然后学C++,算法。
收到的鲜花
  • 广陵绝唱2008-12-13 18:06 送鲜花  49朵   附言:21世纪编程论坛最缺的是什么?人才!

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 16:53
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
谢谢你的建议,我想提一个问题:
c里面有Boolean吗?
单片机也没打算特别的学.

[[it] 本帖最后由 zqy110007 于 2008-12-13 16:56 编辑 [/it]]

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-13 16:54
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
回复 第3楼 rootkit 的帖子
看到这句话没有?
直到C99标准C语言才内置布尔类型_Bool

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 17:02
xlh5225
Rank: 2
等 级:论坛游民
威 望:2
帖 子:188
专家分:25
注 册:2007-8-14
收藏
得分:0 
哎,这么char的说明,还加精呢!
2008-12-13 17:10
xlh5225
Rank: 2
等 级:论坛游民
威 望:2
帖 子:188
专家分:25
注 册:2007-8-14
收藏
得分:0 
深入研究
2008-12-13 17:10
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
以下是引用zqy110007在2008-12-13 16:11的发言:

  比如说我输入的是5,那当它到1的时候,就定义了5个变量,如果我使用的是int来定义的话,那就会比char增加5个字节,如果我输入更大,那就会多增加更多的字节,反之.使用char可以节约一些内存空间.


下面是在32位编译器中编译出来的结果,看看有没有省空间:

 printf("%ld",jc(i));
00411480  mov         al,byte ptr [i]
00411483  push        eax
  
00411484  call        jc (41114Ah)
00411489  add         esp,4
0041148C  mov         esi,esp
0041148E  push        eax  
0041148F  push        offset string "%ld" (41563Ch)
00411494  call        dword ptr [__imp__printf (4182C0h)]
0041149A  add         esp,8
收到的鲜花
  • 广陵绝唱2008-12-13 18:08 送鲜花  49朵   附言:对初学者的提问认真解答,令人佩服。

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 17:13
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
为什么没有省?

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-13 17:20
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
因为这是32位的环境,无论是CPU的数据总线,内存的对齐规则,还是CPU的cache都是按32位设计的,基于效率的考虑将char提升为int类型。
这个时代存储材料越来越便宜,大家最关心的执行效率而不是你节省了多少个字节。

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 17:29
快速回复:关于char的深入研究
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024570 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved