| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2581 人关注过本帖
标题:关于char的深入研究
只看楼主 加入收藏
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
是不是因为在32位的计算机里一个汉字和一个英文字母都只算是一个字符,所以char 是两个字节了.
猜的啊..
但是一般的机子都应该可以节省空间..
还有哦,你的
00411480  mov         al,byte ptr [i]
00411483  push        eax  
我看不懂,是汇编的代码吧?

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-13 17:30
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
char只能是一个字节,这是语言定义的,除char外其他类型标准没有规定长度。
char a single byte, capable of holding one character in the local character set
int an integer, typically reflecting the natural size of integers on the host machine
float single-precision floating point
double double-precision floating point


至于汉字和英文的内存表示问题,这个与字符集和编码标准有关。英文字母常用ASCII编码,从0到127共128个字符,用7bit编码,最高位可作奇偶校验,用一个byte存储。汉字常用的是GBK系列编码和UTF-8编码,GBK是Unicode字符集中汉字和英文字母及一些符号部分的编码表示,用2个byte编码,UTF-8是Unicode字符集最完美的编码,使用变长编码方案,有的符号用一个字节,用的则长达4个字节。

mov         al,byte ptr [i]
这一条指令是将char型变量i的值读入到8位寄存器al中
push        eax  
这条指令将eax这个32位的寄存器压栈

从这里可以看出来,long jc(char i)函数编译后的代码段保持i的char类型,但是执行程序时将相关值存入栈时就将8bit变量提升为32bit了,所以程序运行时并没有如你所想的那样节省空间。
收到的鲜花
  • 广陵绝唱2008-12-13 18:09 送鲜花  49朵   附言:好文章

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 17:59
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
以下是引用rootkit在2008-12-13 17:02的发言:

看到这句话没有?
直到C99标准C语言才内置布尔类型_Bool



在研究rootkit技术??
有时间交流一下

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2008-12-13 18:02
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
以下是引用succubus在2008-12-13 18:02的发言:




在研究rootkit技术??
有时间交流一下


注册这个ID时正在看《Rootkits: Subverting the Windows Kernel 》,就用rootkit做ID了
对内核和安全有兴趣,所以看了一些rootkit的资料。

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 18:38
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
#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;
}

// 短短的几行代码在可读性上实在是太恶心了

// 谁发明了这种代码风格呀  真难看
{
  ...
}  
//两括号不能上下对齐吗?


// 小数阶乘 首选递归  简单明了  不失效率

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2008-12-13 18:55
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
以下是引用新浪在2008-12-13 18:55的发言:

#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);
 ...


大爷我最鄙视跳梁的小丑了。

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 19:11
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
回复 第15楼 新浪 的帖子
我接触的语言不多,但是至少我接触的语言中一个叫做AS的语言,有一个功能,自动按系统格式将代码排列.
他就是这种规则啊.

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-13 19:34
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
以下是引用zqy110007在2008-12-13 19:34的发言:

我接触的语言不多,但是至少我接触的语言中一个叫做AS的语言,有一个功能,自动按系统格式将代码排列.
他就是这种规则啊.


小朋友,你不用睬这种既没有技术有没有人品的东西。

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-12-13 19:40
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
你这家伙说话总喜欢追求时尚
"跳梁"是何意   拾人牙慧 来着吧
最恶你这种货色了  明明想理睬偶  又说这么难听的话来掩饰

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2008-12-13 19:52
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
两位请不要吵了,如果要吵,请到水区。不要影响这里的学习气氛好吗?你看这几天,这里的学习气氛多么滴浓厚哇……不管问题的难易,毕竟都是在学习。

    谢谢两位,好吗?
2008-12-13 19:55
快速回复:关于char的深入研究
数据加载中...
 
   



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

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