| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2212 人关注过本帖
标题:萌新请教Char 变量的问题,恳请大佬们给点意见。
只看楼主 加入收藏
Leviszzz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-3-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:15 
萌新请教Char 变量的问题,恳请大佬们给点意见。
图片附件: 游客没有浏览图片的权限,请 登录注册

图片内左侧是我的程序,右边的是运行结果。

请问:1.为什么%c的时候都显示“?”啊,是因为ASCII标准码里面只有0-127吗,如果大于这个范围就显示“?”吗。
      2.为什么%d的时候就显示197和198分别减去256的结果啊?这是为什么吗啊?

恳请各位大佬们把这个Char函数给我解释一下吧,我见谭浩强老师的书里说的不是很详细,我另外的书也没有详细提到,感激不尽。
搜索更多相关主题的帖子: 图片 
2017-03-29 13:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:4 
1. C不管这些
C只是让控制台显示197,控制台使用什么codepage,是否支持这种编码,等等,C都不管。
当然,你可以用SetConsoleCP去自己设置,但这和C无关

2. 因为在你的编译系统上 c1=197 后 c1就是-59
2017-03-29 13:46
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:4 
显示为负数的原因是你的C实现的char是有符号类型,197发生了上溢。

[此贴子已经被作者于2017-3-29 14:13编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-29 14:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:4 
char。就是无符号型短整。虽然它最大可以是255

但是 我们肉眼可见的ASCII字符最大都不到127

这个东西其实都不用问。自己百度ASCII表

DO IT YOURSELF !
2017-03-29 14:36
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:4 
看看

[此贴子已经被作者于2017-3-29 15:43编辑过]


跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-29 15:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用wp231957在2017-3-29 14:36:51的发言:

char。就是无符号型短整
C语言规定 char、signed char、unsigned char 是三种不同的类型
char 是无符号类型,还是具符号类型,由实现定义,C标准未作硬性要求
即使char是无符号类型,它和unsigned char也是两种不同的类型
即使char是具符号类型,它和signed char也是两种不同的类型

看这段标准的C代码
程序代码:
#include <stdio.h>

#define showchartype(x) puts( _Generic((x), char:"char", signed char:"signed char", unsigned char:"unsigned char") )

int main( void )
{
    showchartype( (char)'a' );
    showchartype( (signed char)'a' );
    showchartype( (unsigned char)'a' );
}
输出
char
signed char
unsigned char

2017-03-29 15:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 rjsp
嘿嘿。没看过正规的书
还真不清楚 你說的这些
char型。实际应用也不咋多

DO IT YOURSELF !
2017-03-29 16:04
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:0 
回复 3楼 renkejun1942
197     11000101 取补码 1--0111010(-58)
198     11000110 取补码 1--0111001(-59)
请问是这样算的吗??为什么和结果不一样,不是-59 和 -58?请教:)

跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-29 16:06
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 8楼 sharplong
C标准并没有规定char到底是有符号,还是无符号。

在有符号情况下,一个字节只有7个位来储存数值,高位用来存储正负符号。
在无符号情况下,一个字节有8个位来存储数值。

这就是区别。

有符号数上溢会得到一个负数,下溢会得到一个整数。
无符号数上溢会是一个大于或等于0的整数,但不会比0小。

你的理解对了一半,你唯一没考虑的是,char到底带不带符号。带符号,你的理解就是对的,如果不带符号,你的理解就是错的。

[此贴子已经被作者于2017-3-29 16:10编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-29 16:09
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
就是这样。

[此贴子已经被作者于2017-3-29 16:25编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-29 16:12
快速回复:萌新请教Char 变量的问题,恳请大佬们给点意见。
数据加载中...
 
   



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

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