C程序设计(5)-对数据类型的补充

整型:

默认情况下整型是有符号的,以short型变量为例:通常占16位存储空间,最左边的一位是符号位(零或正数符号位为0、负数为1)、后十五位是数值位。n位二进制能表示的最大数为2n-1,因此15位的二进制数最大可表示为215-1,即32767,所以short型能表示0~32767之间的非负整数;又由于计算机以补码形式保存整型数据,short型对于复数能表示到-32768,因此两字节(16位)short型变量能保存的整型数值范围是-32768~32767

对于其他的int型、long型、longlong型的整数存储同理(若为无符号型,则所有二进制位全用来保存数据,如unsigned short型最大可表示216-1,即能表示0~65535),此外其变量在机器中所占字节数也与机器位数、编译器等有关

整型常量的默认数据类型为int,如222;若要存储为长整型可于其后加L或l,如222L;若要存储为无符号整型可于其后加U或u,如222U

整型常量可书写为十进制,如365;八进制:0365、0123;十六进制:0x12315、0x77ccff;这些仅为书写形式,计算机内以二进制存储;输出时可使用格式控制符实现进制转换

无符号整型运算过程中发生溢出,会将结果对2n取模(n位该变量的位数)

浮点型:

C语言中实数称为浮点数,浮点数的储存需要保存其符号、指数位和小数,形式如下:

浮点型数据采用和整型数据不同的存储方式,在占用相同存储空间(如四字节)的情况下能储存的数据范围更大

很多编译系统将浮点型常量默认存储为双精度,如:.25,默认分配8字节;若想编译系统将其按单精度处理可在数的后面加F或f,如.25f

有的十进制小数不能转换为有限位的二进制小数,只能用接近他们的二进制小数描述,因此有时浮点数只是近似表示实数,存储时存在误差,float型浮点数精度为6~7位有效位数、double型为15~16位

不同编译器对应的精度有差异,有效位数从第一个非零数开始计算

对于数据的读写,尽管称读需要用相应的格式控制符,写仅需“%f”等即可,但在vs2019的编译器里输出longlong型数据时“%d”、"%ld"无法正确表示,仍需使用“%lld”格式控制符,此处存疑

字符型:

字符型属于整数类型

‘a’ - 'A' = 32

‘1’ = 49 != 1

getchar()、putchar()

scanf(" %c",&ch)

类型转换:

  隐式类型转换:char,short--int--unsigned--long--float--double(其中,char,short--int的转换为必定的转换,其他为当运算对象为不同类型时发生的转换);

  显式类型转换:如(double)5/3;

  对于赋值运算,运算符两边数据类型不一致,自动转换为左边数据变量类型(隐式转换规则不生效)

应用举例:

原文地址:https://www.cnblogs.com/zimsky/p/12673176.html