“字符型减'0'可以得到整数型”的原因分析
来源:互联网 发布:好用的面膜知乎 编辑:程序博客网 时间:2024/05/16 02:00
我们如果对c语言里数据是如何存储的不清楚的话,就会导致我们对程序的理解越来越困难。说白了c语言就是人与机器交流的一种规则,而机器和芯片能明白的只能是0和1这两种高低电平。他们什么也不懂。只是一堆模拟电子和数字电路板集合。那人们怎么会操作这些破玩意儿呢?刚开始人们真的是010101的通过打孔来操作的。后来,人们学聪明了有了汇编又有了c语言、c++、java等等工具。其实每一个语言体系只是一些操作机器的规则而已。你遵守了这个规则就会成为编程高手。
拿c的字符型来说吧,为什么c要分字符型、int型?原因很简单,就是为了更方便的管理数据存储。事实上不管字符还是数据在计算机中都只能用01来表示,那我们怎么能区别他们的不同呢。就用多位的01来表示,一个不够用两个,我们知道用7个01就可以有128个数字被表示,也就是说用几个01就可以表示2的几次方个数字。于是人们提出了ASCII 码(查了百度百科,这样说:在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
计算机中的字符包括数值、英文字母、标点符号、制表符号及其他符号。每一个字符都用一个特定的二进制代码来表示,这就是字符的编码。目前,字符编码采用的是美国信息交换标准代码,即ASCII 码 。它是用一个字节的低七位来表示一个字符的编码, 2^7 =128 ,最高位是 0 ,所以,用 ASCII 码可表示 128 个字符)。有了这个我们就不怕我们输入的字符,计算机不懂了。于是只要我们自己在程序中输入一个字符(例如:‘a’)计算机在编译过程中自动将它转换成97的二进制码,这就是为什么说字符本质上也是整型了,因为字符变量只是告诉计算机,我这个数据只占一个字节,也就是说我超不出128这个数去。而int则告诉我这个数可能很大,有65534那么大呢。
下面就说说为什么字符减'0'可以到相应的整数。现在比如我们要字符‘1’转换成数字1,就这么一个变化,我们看到了大家注意了字符型常量用''括起来的原因是,它们在计算机中都以各自的ASCII表示。而‘1’的对应编码是49的二进制码,但是我们的数字1,就等于1呀,所以为了由原来的‘1’实际上就是49的二进制变成现在的1对应的二进制1,只好用49-48=1了。但是在ASCII码里‘0’对应的刚好是48的二进制码,所以我们转换的时候只需要‘1’-‘0’=1;就可以了。而数字的ASCII码是按顺序规定的。所以其它字符要转换成数字都可以用减‘0’来表示。比如‘2’的ASCII是50,而我们要得到数字2,于是用‘2’-48=2了。看来当我们知道数据在计算机中的存储规则的时候,问题就迎刃而解了。
大小写字母的转换:先看ASCII码:a~z是97~122的二进制,而A~Z是65~90的二进制编码,于是我们就得出:大写字母=小写字母-32 ;这个公式了。当然这里的32我也可以这么写‘Z’=‘z’-'空格'。因为空格的ASCII码是32对应的二进制编码。
- 字符型减'0'可以得到整数型”的原因分析
- “字符型减'0'可以得到整数型”的原因分析
- “字符型减'0'可以得到整数型”的原因分析
- 为什么字符减'0'可以到相应的整数
- gethostbyname的2种用法得到IP(字符型和bigendian整数型)
- 整数和字符型的转换
- 这个如何可以得到一个1 到 文件个数循环整数,如何可以得到?
- 分析wireshark中无法正确显示字符的原因
- 如何快速判断一个整数是否可以整除另一个整数的理论分析
- 快速判断一个整数是否可以整除另一个整数的理论分析
- 分析调用mapviewoffile 时得到拒绝访问的错误信息的原因
- 可以看看 确实有道理 只是做得到做不到的问题,这就是成功人这么少的原因
- 得到中文字符的首字母
- 得到一组随机的字符
- ORA-00911 字符无效 怎么也找不到原因时 可以用下面的方法
- 第5.2节 函数getint接受自由格式的输入,并执行转换,将输入的字符分解成整数,且每次调用得到一个整数
- string char 等字符减去字符0(’0‘)就得到了,该字符的整形
- 初学C语言:特殊乘法(单个数字字符去减‘0’得到的就是数字)
- FE
- kernel是如何选择iommu的呢?
- 移动应用崩溃日志收集工具对比
- Tomcat内存增长分析
- SurfaceView使用实例(示波器)
- “字符型减'0'可以得到整数型”的原因分析
- [题解]bzoj2879(NOI2012)美食节
- 冒泡型事件、捕获型事件
- 找实习遇到的面试题
- HDU 5726 GCD(Sparse-Table+二分)
- 洛谷 P1255 数楼梯
- struts2如何接受非基本类型对象数组或集合
- SQL语句记录
- 正则