字符的输出

一个字符占一个字节,八位,所以字符型数据最多可以存储256种状态。
因为计算机中只能存储0和1,我们想要存储字符怎么办呢,于是就出现了字符集,我们最常用的字符集就是ASCII码,万维码是包含最广的字符集。
字符在计算机无法保存,因为计算机只识别0和1,那就制订了一套规则,用数字表示字符,所以字符在计算机中保存的都是它对应的编码。大多数系统采用的是ASCII字符集,一个字符对应一个ASCII码值。还有其他的字符集,但是各种字符集都包括了127种基本字符。127种基本字符用7个二进制位存储,如果系统只提供127个字符,就将最高位置0,后面7位存放0~127,即127个字符代码。这种情况char就相当于signed char。字符变量是用类型符char定义的类型变量,实质是一个字节的整型变量,经常用它来存储整字符,可以把0~127之间的整数赋给字符变量。
下面是一些比较常用的字符:
字符 :           ‘0’‘a’   'A'    '\0'
对应的ASCII:     48      97    65     0
字符0对应的ASCII 码值是48,0~9是连续的,a~z也是连续的,A~Z也是连续的,可以通过第一个求出后面的ASCII值。
因为我们只能用127个字符,如果不小心把200赋给了一个字符型变量会输出什么字符呢,整数形式还会输出200吗?
200的二进制是 1100 1000
这个数存放在计算机中是怎么表示的,首先看符号位为1,说明是一个负数,要得到数值位就要取反加一
1100 1000->0011 1000 数值位就是56,因为是一个负数,所以输出的整数应该就是-56.这就是溢出。因为发生了溢出,数据会发生截断,和原来的数就不一样了。
用上面这种方法,可以求出201的输出应该是-55,202的输出是-54,对比200的输出是-56,好像是存在一些规律。表面来看,真正的值和输出的值相加为256。为什么会有这种规律呢?
这就和补码有关系了。127的输出还是127,但是如果是128就是-128了,这就是你希望的数值位在存储的时候发生了数据截断,变成了符号位,整体就变成了一个负数,但是由于总体的数就是256个,所以从最大的数127下一个数就是-128,相当于尾和头连接了,就和时钟一样,11点后面应该是12点,但又可以是0点,因为它们互补。
所以我们会得到相加为256.如果这个数是300的话,输出是多少呢,经过在程序中的输出,发现是44,而300-256=44,相当于我们从0开始到127,再从-128到-1,这一轮已经结束了,再超过就是又从0开始了。

#include<stdio.h>
int main()
{
 char  c1,c2;
 c1=200;
 c2=201;
 printf("c1=%c,c2=%c\n",c1,c2);
 printf("c1=%d,c2=%d\n",c1,c2);
 return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值