| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2104 人关注过本帖
标题:萌新请教Char 变量的问题,恳请大佬们给点意见。
只看楼主 加入收藏
Leviszzz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-3-9
收藏
得分:0 
在此一同谢谢各位大佬们了!!感激不尽。
不过我还是没有搞懂啊。

1.所以显示“?”是因为超出标准码范围,系统默认显示“?”了吗?
2.然后197和198上溢就是显示一个负数,那为什么8楼的兄弟算出来的结果又不对呢?

QAQ好复杂哦。
2017-03-29 16:33
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 11楼 Leviszzz
如果你实在想知道,自己找本有二进制补码详细说明的书看看。
反正我是忘的差不多了,没办法更详细的告诉你。

《计算机科学导论》第二章和第三章有很详细的解释。

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


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-29 16:55
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:0 
回复 12楼 renkejun1942
多谢大佬推荐,我还是没搞明白,再研究研究。

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


跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-29 16:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
显示器显示?是因为系统也不知道该显示神马

DO IT YOURSELF !
2017-03-29 17:10
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:0 
回复 11楼 Leviszzz
楼主我在假定char 为有符号整形的情况下貌似得出了结果。
197--------11000101被当做负数的补码所以将其转换为原码求其绝对值
首先减一得到11000100
取反得到----10111011   (-59)
同理:
198 -----------11000110-------减一11000101---------取反10111010(-58)

第一次的回答错误因为使用了错误的补码计算方法。
以下是在百度百科找到的补码计算方法:
图片附件: 游客没有浏览图片的权限,请 登录注册



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


跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-29 17:29
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:4 
以下是引用Leviszzz在2017-3-29 16:33:36的发言:

在此一同谢谢各位大佬们了!!感激不尽。
不过我还是没有搞懂啊。

1.所以显示“?”是因为超出标准码范围,系统默认显示“?”了吗?
2.然后197和198上溢就是显示一个负数,那为什么8楼的兄弟算出来的结果又不对呢?

QAQ好复杂哦。

1、字符内码197属扩展码部分,如果显示输出设备不支持单字节扩展字符显示模式,看到的可能会是“乱码”,就象常说到的半个汉字乱码现象:
#include <stdio.h>
main()
{
    char *s="牌";
    printf("%d %d\n", (unsigned char)s[0],(unsigned char)s[1]);
    printf("%d %d\n", s[0],s[1]);
    printf("%c %c\n", s[0],s[1]);
    printf("%c%c\n", s[0],s[1]);
}

2、197与-59,是同一问题的两个方面,一个BYTE有符号[-128,127]与无符号[0,255]。对于char类型,C没有默认是signed还是unsigned,至于当char(%c)转换成int(%d)时是有符号或是无符号,这个与硬件有关,这个问题在ARM的机器上试试可能会看到不同的结果。

[此贴子已经被作者于2017-3-30 06:11编辑过]

2017-03-30 06:06
快速回复:萌新请教Char 变量的问题,恳请大佬们给点意见。
数据加载中...
 
   



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

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