c/c++ 关于数的基础知识
2017-02-12 14:41
375 查看
为什么计算机采用补码存储数据
http://www.360doc.com/content/12/1009/21/10086564_240513741.shtml字符常量
一种是普通字符,即用单撇号括起来的一个字符,如’b’ ,’y’,‘?’。字符常量在储存在计算机的储存单元中时,是以其代码(一般采用ASCII代码)储存的。另一种是转义字符,即特殊字符常量。转移字符是C语言中表示字符的一种特殊形式,其含义是将反斜杠后面的字符转换成另外的意义。
一种是用字符的八进制ASCII码,表示为:\0dd.这里,0dd是八进制值(0可以省略)。
另一种使用字符的十六进制ASCII码值,表示为 \xhh或Xhh 这里hh是两位十六进制值
如:’A’ ,’\101’ 和 ‘\x41’都表示同一个字符常量。
在C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个ASCII字符集中的字符括起来作为字符常量。
字符常量在内存中占4个字节,存放的是字符的ASCII码(整型数据)。C语言规定所有字符常量都作为整型量来处理。
在C语言中,字符型数据与整型数据可通用:10+’R’
实型常量
又称实数或浮点数。在C语言中可以用两种形式表示一个实型常量。小数形式
小数形式是由数字和小数点组成的一种实数表示形式,例如0.123、.123、123.、0.0等都是合法的实型常量。
注意:小数形式表示的实型常量必须要有小数点。
*指数形式
这种形式类似数学中的指数形式。在数学中,一个可以用幂的形式来表示,如2.3026可以表示为0.23026×10^1 2.3026×10^0 23.026×10^-1等形式。在C语言中,则以“e”或“E”后跟一个整数来表示以“10”为底数的幂数。2.3026可以表示为0.23026E1、2.3026e0、23.026e-1。C语言语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数。如e3、5e3.6、.e、e等都是非法的指数形式。注意:在字母e或E的前后以及数字之间不得插入空格。
程序运行的过程中,其值不能被改变的量称为常量。常量有不同类型,其中12、0、-5为整型常量。’a”b’为字符常量。而4.6、-8.7则为实型常量。
一个实型常量可以赋给一个 float 型、double 型或 long double 变量。根据变量的类型截取实型常量中相应的有效位数字。
float double
C语言float double数据的验证,参考如下文档http://download.csdn.net/download/qq_26437925/8781517
浮点数 IEEE 采用符号位,指数位,尾数位来表示
float 32bit: 符号位1 指数位8 尾数23
指数部分
占用8-bit的二进制数,可表示数值范围为0-255。但是指数应可正可负,所以IEEE规定,此处算出的次方(即是来自内存存储的内容,存储指数)须减去127才是真正的指数(实际的指数,如12.5转换为二进制为:1100.100=1.100100*2^3, 3即为实际指数)。除去全0,全1的情况(用全0表示0,全1表示无穷大),所以最后实际的指数大小是 -126 - 127
最大float
(1.11111.....1)<sub>2</sub>×2<sup>127</sup> =(1+1-2<sup>-23</sup>) ×2<sup>127</sup> =(2-2<sup>-23</sup>) ×<sup>127</sup> = 2<sup>128</sup>-2<sub>104</sup>
double 64bit: 符号位1 指数位11 尾数52
浮点数的有效位数
单精度浮点数的有效位数是7位。双精度浮点数的有效位数是16位
一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M。
单精度浮点数(float)总共用32位来表示浮点数,其中尾数用23位存储,加上小数点前有一位隐藏的1(IEEE754规约数表示法), `2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,` 所以说单精度浮点数的有效位数是7位。考虑到第7位可能的四舍五入问题,所以单精度最少有6位有效数字(最小尺寸)。 同样地:双精度浮点数(double)总共用64位来表示浮点数,其中尾数用52位存储, `2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,`所以双精度的有效位数是16位。同样四舍五入,最少15位。
原码,补码,烦码,移码
原码:如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。
例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 10101011
位数不够的用0补全。
PS:正数的原、反、补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0。
反码:
知道了什么是原码,那反码就更是张飞吃豆芽——小菜一碟了。知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码,为什么呢?因为反码就是在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)就可以了。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100
补码:
补码也非常的简单就是在反码的基础上按照正常的加法运算加1。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101
PS:0的补码是唯一的,如果机器字长为8那么[0]补=00000000。
移码:
移码最简单了,不管正负数,只要将其补码的符号位取反即可。
例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101,[X]移=01010101
#
相关文章推荐
- 关于笔试题中C++的一些基础知识
- 学习C++动态链接库基础知识 (主要关于QT项目)PART2
- 关于C++的基础易错知识(源于各种笔试题,自己要记得不断更新)
- 关于C++程序设计的基础核心之二:继承与派生的基本知识
- C++基础知识—关于默认构造函数的一切
- C++学习(4)--基础知识(4)--关于const
- 学习C++动态链接库基础 4000 知识 (主要关于QT项目)
- C++学习(3)--基础知识(3)--关于操作符的重载
- C++基础——关于模板的技巧性基础知识(typename、成员模板、模板的模板参数)
- 关于HOOK基础知识(windows API ,C++)
- 关于程序注释的基础知识
- 一些关于Globus的基础知识
- 关于javascript的基础知识
- (转贴) 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识
- 自己总结C/C++的一些容易被遗忘的基础知识!
- 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识 (转)
- 关于Unicode 和字符集的最基础的知识
- C/C++语言基础知识总结
- 关于DNS的一些基础知识
- 关于C++准备知识