-
整数的输入输出1
数据类型有很多:char、int、long、long long…
但在输入输出格式化时,只有两种:
变换看待方式,还有unsigned:
在计算机内部,一串字符在现实中表示什么取决于用什么样的方式去看待它,比如
%d
与%u
同样输出同一个位串
,会不一样。 -
八进制与十六进制
字面量,是在编译器编写界面里的内容,可以有比如
012
表示8进制
,编译器会自动将其转成10进制
,但是这是编译器这个层面的事情,在计算机底层只有2进制
。进制 字面量 输入输出格式化 2进制 字面量并不会直接写二进制 8进制 0开头 %o、%O 10进制 正常数字 %d、%ld 16进制 0x开头 %x、%X -
整数类型的选择
C语言有很多整数类型,因为设计之初,需要考虑到跟硬件打交道,位数不同是适应不同硬件配置。
当下,尽量默认选择
int
作为整数。因为当下计算机已经默认了32位,即便是使用char
、short
类型,实际调用中可能基于内存对齐,速度反而更慢。unsigned
只是作用于输出过程,没有热别需要也不使用。 -
浮点数
浮点数有两种:
- float
- double
类型 输入输出格式化 字长 范围 有效数字 备注 float scanf: %f
;
printf:%f
,%.16f
(小数点后16位,四舍五入),%e
(科学记数法),%E
(大写)32(4个字节) 7 在 0左右
很小区域内,是无法表达的double scanf: %lf
;
printf:%lf
,%e
(科学记数法),%E
64 15 在 0左右
很小区域内,是无法表达的nan
:不是有效的数字有效数字:*7(15)个数字是有效的,第8(16)*个就是不准确的。
浮点数有精度,数字本质上连续的,但是计算机只能通过离散数来表示一个准确的数,实际上计算机内部不能准且表示,
double
相比于float
精度更高,能表示的更准确,但依然是个近似值。 -
References
翁恺, C语言程序设计, [B站], 6.1.5 - 6.1.7 ↩︎