刚学C语言 请问ASCII码值为128-255字符型数据转为整型变量时得到的是-128--1的值 怎样算的 谢谢

 我来答
iam_haitian
推荐于2017-09-19 · TA获得超过558个赞
知道小有建树答主
回答量:356
采纳率:0%
帮助的人:341万
展开全部
因为一个char的大小是一个byte即8个bit,一共可以表示2的8次方即256个数字0-255
但是char分为signed和unsigned两种形式,即是否有正负之分

如果是signed就是有正负号的,在机器码中8位二进制bit就需要占用一个作为区别正负号的标记,分别用1或0表示,那么剩下的7个bit能够表示0-127的数字,由于2的8次方一共是256个数字,可以得到负数范围内有128个数字,即一个signed char能表示从-128-127的数字
与之相对的,unsigned char即表示从0-255的值,由于ASCII码没有负值,而且一般的ASCII码只需要使用0-127就足够了,所以剩下的那128个字符就组成了extended ASCII,当然,一般是没有什么作用的,也可以看到这个范围的符号一般都是些稀奇古怪的,但是你将它赋值到这个范围就引起了这个问题

虽然定义一个char变量生成的究竟是unsigned char还是signed char和你具体使用的环境有关,但一般的INTEL计算机都是生成signed char,如果你不能确定可以使用limits.h中提供的常量来确定,当然int long 等等也能够用相同方式查看,如果是float的话用float.h查看,具体的可以查询library的说明,程序如下,自己运行看看吧

#include <stdio.h>
#include <limits.h>

main(){
int a=CHAR_MIN;
int b=CHAR_MAX;
printf("%d %d\n",a,b); //Print the minimum value and maximum value of data type char
}

现在我们已经明白了,用8位bit表示的signed char是无法表示超过127的数字的,所以呢,当你赋予变量一个超过127的值的时候,它就会自动变回负值的最小值并向上递加,可以想象成一个圆环,原理在于CPU中只存在加法器,所以如果不能循环,你就没法做减法了,具体的你可以随便买一本微机原理看看,我推荐CSAPP,如果你想要具体研究C语言的话,可以看看C语言圣经K&R,多用用LINUX
johnkinglin
2013-04-20 · TA获得超过256个赞
知道小有建树答主
回答量:105
采纳率:100%
帮助的人:73.4万
展开全部

0的ASCii值为16,ASCII值转换为整形数据很简单,只要字符代表的ASCII值减去0代表的ASCII值也就是减去16就是转换后的整形数据,希望能解答你的疑惑

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式