对于C/C++这种强类型的语言来说,float和double是其最基本的数据类型,但是对于初学者来说或者已经都c/c++都了解比较到位的程序员来说还是容易遗忘;简单来讲float和double如下:
浮点类型
类型 | 有效位 | 字节数 |
float | 6 – 7 | 4 |
double | 15 – 16 | 8 |
浮点变量由尾数(包含数字的值)和指数(包含数字的数量级)表示。
下表显示了分配给每个浮点类型的尾数和指数的位数。 任何 float 或 double 的最高有效位始终是符号位。 如果符号位为 1,则将数字视为负数;否则,将数字视为正数。
指数和尾数的长度
类型 | 指数长度 | 尾数长度 |
float | 8 位 | 23 位 |
double | 11 位 | 52 位 |
由于指数是以无符号形式存储的,因此指数的偏差为其可能值的一半。 对于 float 类型,偏差为 127;对于 double 类型,偏差为 1023;
· float 为4个字节,表示为:一个符号位,8个指数位, 23个尾数,所以有效位数由尾数来 决定,即2^23=8388608共有7位, 指数的范围是2^(-127~127)
· double为8个字节:表示为:一个符号位,11个指数位,52个尾数来表示,所以有效位数为
2^52=4503599627370496 为15位,指数的范围为2^12-1=4095(-2047~2047)
如下代码:
/*输出结果显示float和double的有效位数。float最多表示7位有效数据。double最多表示16位有效数据。运行结果:float is 3.33333325386047363281,double is 3.33333333333333348136 float 有7个3,double有16个3. */ #include <stdio.h> int main(){ float f = 10./3 ; double d = 10./3 ; printf("float is %.20f,double is %20.20f\n" ,f, d); //指定输出的字符宽度为20,小数点位数为20,不指定字符宽度,只指定小数点位数。 return 0 ;}
当你使用不用的ide编写代码时,总会发现在每行的最后会出现不同的箭头,或者当你在vs下编写的代码在vim打开时,会发现每行结尾会出现^M等特殊字符,这就是linux和windows下换行符(CRLF)的区别了
CRLF的意思
就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。
uinix系统下:换行是:LF,即---> \n
CRLF注入攻击并没有像其它类型的攻击那样著名。但是,当对有安全漏洞的应用程序实施CRLF注入攻击时,这种攻击对于攻击者同样有效,并且对用户造成极大的破坏。让我们看看这些应用程序攻击是如何实施的和你能够采取什么措施保护你的机构。
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
Unix系统里,每行结尾只有“<换行>”,即"\n";Windows系统里面,每行结尾是“<换行><回车 >”,即“\n\r”;Mac系统里,每行结尾是“<回车>”,即"\r";。一个直接后果是,Unix/Mac系统下的文件在 Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.
Dos和windows采用回车+换行CR/LF表示下一行,
而UNIX/Linux采用换行符LF表示下一行,
苹果机(MAC OS系统)则采用回车符CR表示下一行.
CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A.
所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.
一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件.
在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错.
很多文本/代码编辑器带有换行符转换功能, 使用这个功能可以将文本文件中的换行符在不同格式单互换.
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化. 如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本.
Windows系统下:换行是:CRLF, 即---> \r\n;