当前位置: 首页 > article >正文

【C语言基础】基本数据类型和常量介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

博客内容主要围绕:
       5G/6G协议讲解
       高级C语言讲解
       Rust语言讲解



文章目录

  • 基本数据类型和常量介绍
    • 一、整数类型 int
    • 二、浮点数值类型 float
    • 三、扩展精度类型 double
    • 四、单字符类型 char
    • 五、布尔数据类型 _Bool
    • 六、类型说明符 long、long long、short、unsigned和signed
    • 七、类型测试示例

基本数据类型和常量介绍

       之前博客已经介绍过C语言的基本数据类型int,声明为int类型的变量只能用于存储整型值,即没有小数点的值。C编程语言还提供了另外4种基本数据类型:floatdoublechar_Bool。声明为float类型的变量可用于存储浮点数(包含小数位的值)。double类型与float类型相同,只是精度大约是float的两倍。char类型可以用来存储单个字符,比如字母‘a’、数字‘6’或分号(‘;’)。最后,_Bool数据类型仅可用于存储值0或1。这种类型的变量用于表示开/关、是/否或真/假的情况。这种非此即彼的选择也称为二元选择。

       在C语言中,任何数字、单个字符或字符串都被称为常量(constant)。例如,数字58表示一个常量整数值。字符串“Programming in C is fun.\n”是常量字符串的一个例子。完全由常量值组成的表达式称为常量表达式(constant expression)。下面的表达式就是一个常量表达式,因为表达式中的每一项都是一个常数值:

128 + 7 - 17

另外,如果下面的表达式中,变量i被声明为一个整数变量,则这个表达式就不是常量表达式了。因为它的值会根据i的取值而变化。如果i为10,表达式的值等于125,而如果i的值是200,则表达式的值就变成了-65。

128 + 7 – i 
类型常量举例printf字符
char‘a’,’\n’%c
_Bool0,1%i,%u
short int%hi,%hx,%ho
unsigned short int%hu,%hx,%ho
int12,-97,0xFFE0,0177%i,%x,%o
unsigned int12u,100U,0XFFu%u,%x,%o
long int12L,-2001,0xffffL%li,%lx,%lo
unsigned long int12UL,100ul,0xffeeUL%lu,%lx,%lo
long long int0xe5e5e5e5LL,500ll%lli,%llx,%llo
unsigned long long int12ull,0xffeeULL%llu,%llx,%llo
float12.34f,3.1e-5f,0x1.5p10,0x1P-1%f,%e,%g,%a
double12.34,3.1e-5,0x.1p3%f,%e,%g,%a
long double12.34l,3.1e-5l%Lf,%Le,%Lg

一、整数类型 int

       在C语言中,整数常数是由一个或多个数字组成的序列。序列前面的减号表示值是负数。158、−10和0都是有效的整数常量。数字之间不能有空格,大于999的值不能用逗号表示。(因此,12,000不是一个有效的整数常量,必须写成12000)

       C语言中的两种特殊格式允许整数常量以非十进制(以10为基数)格式表示。如果整数的第一位是0,则表示使用八进制(octal)数表示,即以8为基数。在这种情况下,值的剩余数字必须是有效的八进制数字,因此必须是0 ~ 7。因此,要在C语言中表示八进制数50,即十进制的40,就使用表示法050。类似地,八进制常量0177表示十进制值127 (1 × 64 + 7 × 8 + 7)。通过在printf()语句的格式字符串中使用格式字符%o,可以在终端以八进制表示法显示整数值。在这种情况下,该数值显示为不带前导零的八进制形式。使用格式字符%#o会在八进制值之前显示前导零。

       如果整数常量前面有一个0和字母x(大写或小写),则该值被认为是以十六进制(以16为基数)表示的。紧跟在字母x之后的是十六进制值的数字,可以由数字0~9和字母a~f(或A~F)组成。这些字母分别表示值10~15。因此可以使用下面的语句将十六进制值FFEF0D赋值给一个名为rgbColor的整数变量。

rgbColor = 0xFFEF0D; 

此外,可以使用格式字符%x显示一个不带前导0x的十六进制值,并且使用小写字母a~f表示十六进制数字。如果要显示以0x开头的值,可以使用格式字符%#x,如下所示。

printf ("Color is %#x\n", rgbColor); 

要用大写字母显示前导x和随后的十六进制数位,可以使用一个大写的x,如%X%#X

二、浮点数值类型 float

       一个声明为float类型的变量可用于存储包含小数位的值。通过是否有小数点来区分浮点数常数。你可以省略小数点前的数字或小数点后的数字,但显然不能省略两者。数值3.、125.8、-.0001都是有效的浮点常量。要在终端显示浮点数,需要使用printf()转换字符%f

       浮点常量也可以用科学记数法(scientific notation)表示。数值1.7e4就是用这种表示法表示的浮点数,表示1.7×。字母e前面的值称为尾数(mantissa),后面的值称为指数(exponent)。指数表示10的幂,且该指数前面可以有一个可选的加号或减号,尾数将与这个幂值相乘。因此,在常数2.25e−3中,2.25是尾数的值,−3是指数的值。该常数表示值2.25×,即0.00225。顺便说一下,用于将尾数和指数分开的字母e,既可以用小写也可以用大写。

       要用科学记数法显示值,应该在printf()格式字符串中指定格式字符%e。printf()格式字符%g可用于让printf()决定以普通浮点记数法还是科学记数法显示浮点值。这个判断基于指数的值:如果指数小于-4或大于5,则使用%e(科学记数法)格式;否则,使用%f格式。

       使用%g格式字符显示浮点数,它可以生成最美观的输出。一个十六进制(hexadecimal)浮点常数包含一个前导0x或0X,随后是一个或多个十进制或十六进制数字,然后是一个p或P,最后是一个可选的有符号的二进制指数。例如,0x0.3p10表示值3/16×= 192.0。

三、扩展精度类型 double

       double类型与float类型非常相似,但当float变量提供的范围不够时,可以使用它。声明为double类型的变量所能存储的有效位数大约是float类型变量的两倍。大多数计算机使用64位来表示双精度值。

       除非另有说明,否则所有浮点常量都被C语言编译器视为double值。若要显式表示一个float常数,可以在数字后面追加f或F,如下所示:

12.5f

       要显示double值,可以使用格式字符%f、%e或%g,它们与用于显示float值的格式字符相同。

四、单字符类型 char

       一个char变量可用于存储单个字符。一个字符常量用一对单引号括起来。所以’a’、’;’和’0’都是有效的字符常量例子。第一个常量表示字母a,第二个是分号,第三个是字符0,它与数字0不同。不要将字符常量(用单引号括起来的单个字符)和字符串(用双引号括起来的任意数量的字符)混淆。

       字符常量’\n’(换行符)是一个有效的字符常量,尽管它似乎与前面提及的规则相矛盾。这是因为反斜杠字符在C语言系统中是一个特殊字符,实际上并不算字符。换句话说,C语言编译器将字符’\n’视为单个字符,尽管它实际上是由两个字符组成的。还有其它以反斜杠字符开头的特殊字符。

       在终端上显示char变量的值,可以在printf()调用中使用格式字符%c

五、布尔数据类型 _Bool

       _Bool变量在语言中定义得足够大以存储值0和1。但对它使用的精确内存数量未做明确规定。_Bool变量用于需要表示布尔条件的程序中。例如,可以使用这种类型的变量表示是否已经从文件中读取了所有数据。

       按照惯例,0用来表示假值,1表示真值。当给_Bool变量赋值时,0的值在变量内部被存储为0,而任何非0的值都被存储为1。

       为了能够在程序中更容易地使用_Bool变量,在标准头文件<stdbool.h>中定义了值bool、true和false。

六、类型说明符 long、long long、short、unsigned和signed

       如果将long说明符直接放在int声明的前面,则声明的整型变量将在某些计算机系统上具有扩展的范围。下面是一个long int声明的例子:

long int factorial; 

       上面的语句将变量factorial声明为一个long整型变量。与float和double一样,long变量的精度取决于特定的计算机系统。在许多系统上,int和long int的取值范围相同,二者都可用于存储32位宽的整数值(即2147483647以内的整数值)。

       可以通过在整型常量的末尾追加字母L(大写或小写),可以构成一个long int类型的常量值。数字和L之间不允许有空格。因此,下面的语句将numberOfPoints声明为一个long int类型,并为其赋初值131071100。

long int numberOfPoints = 131071100L; 

       要使用printf()显示long int的值,可以在整数格式字符i、o和x之前添加字母 l 作为修饰符。这意味着格式字符%li可以显示十进制格式的long int值,字符%lo可以显示八进制格式的值,字符%lx可以显示十六进制格式的值。

       此外,还有一种long long整型数据类型:

long long int maxAllowedStorage; 

上面的语句将所示变量声明为指定的扩展精度,保证至少64位宽。为了显示long long整数,需要在printf字符串中使用了两个l,而不是单个字母l,如”%lli"。
long说明符也允许出现在double声明前,如下所示:

long double US_deficit_2004; 

通过在long double常量后面添加字母l或L被写成一个浮点常量,例如

1.234e+7L

       要显示一个long double值,可以使用L修饰符。因此,%Lf在浮点表示法中显示long double值,%Le在科学表示法中显示相同的值,而%Lg告诉printf()在%Lf和%Le之间进行选择。
说明符short放在int声明的前面时,告诉C语言编译器正在声明的特定变量用于存储相当小的整数值。使用short变量主要是为了节省内存空间,在程序需要大量内存且可用内存数量有限的情况下,这可能会成为一个问题。

       在某些机器上,一个short int变量所占的存储空间只有常规int变量的一半。在任何情况下,都可以保证为short int类型分配的内存空间量不少于16位

       在C语言中,无法明确地编写一个short int类型的常量。要显示short int变量,需要将字母h放在任何普通整数转换字符之前:%hi%ho%hx。或者,你也可以使用任何整数转换字符来显示short int,这是因为在将它们作为参数传递给printf()函数时,它们可以被转换为整数。

       当一个整数变量仅用于存储正数时,可以将unsigned说明符放在int变量前面。如下面的代码所示。下面的代码向编译器声明counter变量仅用于存储正数值。通过将整数变量的使用限制为仅存储正整数,可以扩展整数变量的精度。

unsigned int counter; 

通过在常量后面添加u(或者U)可以构成一个unsigned int常量,如下所示:

	0x00ffU

       在写整型常量时,你可以把字母u(或U)和l(或L)组合起来,如下面代码所示。目的是告诉编译器将常量20000视为unsigned long变量。

20000UL

       如果一个整型常量后面没有任何字母u、U、l或L,而且它太大而无法存入普通大小的int中,编译器会将其视为unsigned int。如果它太大,无法放入unsigned int,编译器会将其视为long int。如果它仍然无法装入long int,编译器会将其转换为unsigned long int。如果还不适合,编译器将其视为long long int类型,否则视为unsigned long long int类型。

       可以使用signed限定符明确地告诉编译器某个特定变量是有符号量。

七、类型测试示例

#include <stdio.h> 

int main (void) 
{ 
	int integerVar = 100; 
	float floatingVar = 331.79; 
	double doubleVar = 8.44e+11; 
	char charVar = 'W'; 
	
	_Bool boolVar = 0; 
	
	printf ("integerVar = %i\n", integerVar); 
	printf ("floatingVar = %f\n", floatingVar); 
	printf ("doubleVar = %e\n", doubleVar); 
	printf ("doubleVar = %g\n", doubleVar); 
	printf ("charVar = %c\n", charVar); 
	
	printf ("boolVar = %i\n", boolVar); 
	
	return 0; 
} 

程序输出如下:

integerVar = 100 
floatingVar = 331.790009 
doubleVar = 8.440000e+11 
doubleVar = 8.44e+11 
charVar = W 
boolVar = 0; 


在这里插入图片描述


http://www.kler.cn/a/560098.html

相关文章:

  • 2025 银行业科技金融创新与发展报告
  • 如何查看图片的原始格式
  • c高级终端指令
  • 【R语言】dplyr包经典函数summarise函数
  • 测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法
  • 【JavaEE】SpringMVC 请求传参
  • Ubuntu非conda环境python3.8下安装labelme
  • Vue全局变量的定义和使用,创建 Store变量、读取、修改
  • Django数据库操作
  • 最长递增子序列(贪心算法)思路+源码
  • zookeeper从入门到精通
  • 在CentOS7上部署与关闭Flask接口
  • GoFly框架中集成Bolt 和badfer两个Go语言嵌入式键值数据库
  • 2025.2.24总结
  • 【java】重载(overloading)和重写(overriding)
  • 单片机分层架构的头文件设计
  • springboot集成jackson-dataformat-xml实现发送XML请求和XML响应参数处理
  • 商业银行预算管理系统的架构、流程、原型
  • 一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app
  • JAVA+MySQL实现分库分表及设计思路