永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-01-31 00:15
刚学C语言 请问ASCII码值为128-255字符型数据转为整型变量时得到的是-128--1的值 怎样算的 谢谢
最佳答案
因为一个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
#include

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
全部回答


0的ASCii值为16,ASCII值转换为整形数据很简单,只要字符代表的ASCII值减去0代表的ASCII值也就是减去16就是转换后的整形数据,希望能解答你的疑惑
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
兄弟校油泵地址在什么地方,想过去办事
阿阁汽车电器修理部怎么去啊,我要去那办事
几处早莺争暖树 是鸟类的
女友十八岁生日祝福语
草字头下面加个弓念什么?
阿存专业轿车轮胎修理店地址在什么地方,我要
台湾·翔美地址有知道的么?有点事想过去
支付结算是一种要式行为。()对错
为什么月经后第二天还会来一两点血
类似周家兄弟的耽美小说,只要名字
带 xiao 和 wen 的诗句。
死神现在完全看不了了吗
钢铁是怎样炼成的3个问题
阿贵修理行地址有知道的么?有点事想过去
一块三角地,边长分别是156米、138米、282米,
推荐资讯
后趴埠村地址在哪,我要去那里办事
江苏银行(新沂支行)地址在什么地方,想过去办
zeemmi手机开不开机了怎么办
目光敏锐是什么意思
笔记本中处理器:都是酷睿双核Penryn与Merom
优分期对没有按时还款行为是怎么处理的?
韶关马坝到深圳汽车
vivo手机被恶意锁屏了怎么办
一水二石为什么风水好
星星星网吧怎么去啊,我要去那办事
下列项目中,不属于资产负债表中“流动资产”
改革首先从农村开始。1985年起,城市改革全面
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?