免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 42738 | 回复: 9
打印 上一主题 下一主题

char、signed char 和 unsigned char 的区别在哪里???  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-21 18:00 |只看该作者 |倒序浏览
rt


为什么有疑问就不能问呢??

你自己是专门研究某项技术的,别人尊重你才来请教而已,并不代表问的人就比你差,在我的领域之类你也仅仅是个门外汉!

为何不能多多给一些建设性的回复呢???

[ 本帖最后由 oract666 于 2007-1-21 19:01 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-21 18:19 |只看该作者
看书

论坛徽章:
0
3 [报告]
发表于 2007-01-21 19:05 |只看该作者

再发 char 、signed char 、unsigned char 区别的问题!!!!!

请教大家为何在int里面 signed int 等价于 int
而在char里面 signed char却不等价于char呢??

区别究竟在哪里呢?

那些轻易就否定别人问题的人,给作个解释岂不是功德无量??

论坛徽章:
0
4 [报告]
发表于 2007-01-21 19:16 |只看该作者
原帖由 oract666 于 2007-1-21 19:05 发表
请教大家为何在int里面 signed int 等价于 int
而在char里面 signed char却不等价于char呢??

区别究竟在哪里呢?

那些轻易就否定别人问题的人,给作个解释岂不是功德无量??


C/C++支持有符号和无符号整数,默认是有符号的。

论坛徽章:
0
5 [报告]
发表于 2007-01-21 19:23 |只看该作者
搂主这个问题在这个世界上应该被问过不止1次。

很多地方都有提问和回答,楼主可以看看。


传说中有个网站做搜索的能够搜索到很多东西,建议楼主试一下。

另外十分抱歉,我刚刚学上网不久,也就会聊个QQ什么的。怎么搜索还没有学会。如果楼主知道,请在这里告诉兄弟一声。


十万份感谢。

论坛是学习和交流的地方,很愿意与楼主兄交流。

论坛徽章:
0
6 [报告]
发表于 2007-01-21 19:26 |只看该作者
原帖由 net_robber 于 2007-1-21 19:23 发表
搂主这个问题在这个世界上应该被问过不止1次。

很多地方都有提问和回答,楼主可以看看。


传说中有个网站做搜索的能够搜索到很多东西,建议楼主试一下。

另外十分抱歉,我刚刚学上网不久,也就会聊个QQ ...



那你还是回去学学怎么上网吧

这个问题我已经差不多找到答案了,马上贴出来

稍等。。。

论坛徽章:
0
7 [报告]
发表于 2007-01-21 19:36 |只看该作者
signed -128~127
unsigned char 0~127
char 0~127,signed

论坛徽章:
0
8 [报告]
发表于 2007-01-21 19:42 |只看该作者

回复 6楼 oract666 的帖子

还是我自己自问自答吧

ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char
char相当于signed char或者unsigned char,但是这取决于编译器!
这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。
signed char取值范围是 -128 到 127
unsigned char 取值范围是 0 到 255

但是char究竟相当于signed char呢还是相当于unsigned char呢??
这就是char和int的不同之处!
int==signed int,但是char不能简单以为==signed char

要确定char究竟等同什么要基于不同的编译器做测试
大多数机器使用补码来存储整数,在这些机器中按照整数类型存储的-1的所有位均是1
假设我的机器也是如此存储,就能据此判断char究竟是等于signed char还是unsigned char

程序如下:
[oracle@test c]$ vi test_char.c

#include <stdio.h>

int main()
{
    char a=-1;
    signed char b=-1;
    unsigned char c=-1;

    printf("a=%d,b=%d,c=%d",a,b,c);

    return 0;
}
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"test_char.c" [New] 12L, 148C written
[oracle@test c]$
[oracle@test c]$
[oracle@test c]$
[oracle@test c]$
[oracle@test c]$ cc test_char.c -o test_char
[oracle@test c]$
[oracle@test c]$
[oracle@test c]$ ./test_char
a=-1,b=-1,c=255
[oracle@test c]$

据此可以判断在我的机器上char==signed char

但是绝对不能武断认为char==signed char就好像int==signed int 一样天经地义

说实话今天我就是看书的时候看到这一段说char不简单等同于signed char所以才发问的
刚才收到别人刺激自己找了好多资料还专门打电话问了过去的老师才有所了解

但是我想大部分人还是单纯认为char==signed char的,其实换位思考一下就清楚了
c规定了九种不同的整形其中有char和signed char 和 unsihned char
但是只有int 没有 signed int(二者相等)
如果简单认为char就是等同于signed char的话那8种不就完事了??

如果编译器支持unsigned char和char的等同,设置这个选项就会发现char==unsigned char
这个我还在做测试


大家注意观察一下,这个小小问题有多少人真正了解呢???
这种问题难道不值得我们仔细研究琢磨吗????

[ 本帖最后由 oract666 于 2007-1-21 19:48 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-01-21 19:59 |只看该作者

回复 8楼 oract666 的帖子

最后一点也证实了

-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
  这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参
数)或者 signed char(后两个参数)


[oracle@test c]$ vi test_char.c

#include <stdio.h>

int main()
{
    char a=-1;
    signed char b=-1;
    unsigned char c=-1;

    printf("a=%d,b=%d,c=%d",a,b,c);

    return 0;
}
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
[oracle@test c]$ cc test_char.c -o test_char -funsigned-char
[oracle@test c]$ ./test_char
a=255,b=-1,c=255
[oracle@test c]$


如此 char就等同于unsigned char了


到这里可以结帖了

论坛徽章:
0
10 [报告]
发表于 2007-01-21 20:11 |只看该作者
谢谢您的分析。我找到了一些内容,希望对大家有用:

http://publications.gbdirect.co. ... integral_types.html

另外,请原谅我的无知和鲁莽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP