C语言基本类型(unsigned int ....float.....double .....char....)

C语言基本类型

    • 1、整数类型
      • 整数常量
    • 2、浮点类型
      • 浮点常量
    • 3、字符类型
    • 4、类型转换
    • 5、定义新的类型

计算机处理的是数,而不是符号,学习C语言,得了解它所支持的基本类型,这样我们才能更好的运用C语言,尤其是在嵌入式编程中。

1、整数类型

计算机的一切基础都是基于数的处理,在C语言中是如何表达负整数,正整数和0的呢?在C语言中整数类型分为两种有符号类型(signed)和无符号类型(unsigned), 如果再按照范围划分的话,又有短整型(short)、整型(int)和长整型(long), 这样一来类型就比较多了,这样看起来比较累人,你定义一个变量时,需要为这个变量确定范围,保证这个变量的正常使用。假如你正在使用c语言在16位机器上开发一个只显示秒的时钟显示程序,你设置一个unsigned int 类型的sec变量,一秒钟+1,但是过了65535秒之后,该时钟上显示突然变成了0, 这时的你很崩溃,发生了什么???原来是无符号整数溢出了呀!所以我们需要注意C语言基本类型的取值范围,这样我们才能在嵌入式开发中披荆斩棘。
下表是不同整数类型的范围。

表1 16位机的整数类型

类型 最小值 最大值
short int -2^15 - 1 2^15 - 1
unsigned short int 0 2^16 - 1
int -2^15 -1 2^15 -1
unsigned int 0 2^16 - 1
long int -2^31 -1 2^31 - 1
unsigned long int 0 2 ^ 32 -1

表2 32位机的整数类型

类型 最小值 最大值
short int -2^15 - 1 2^15 - 1
unsigned short int 0 2^16 - 1
int -2^31 -1 2^31 -1
unsigned int 0 2^16 - 1
long int -2^31 -1 2^31 - 1
unsigned long int 0 2 ^ 32 -1

表3 64位机的整数类型

类型 最小值 最大值
short int -2^15 - 1 2^15 - 1
unsigned short int 0 2^16 - 1
int -2^31 -1 2^31 -1
unsigned int 0 2^16 - 1
long int -2^63 -1 2^63 - 1
unsigned long int 0 2 ^ 64 -1

上表并不是标准,会根据编译器的不同而改变。

整数常量

整数常量是在C程序中以文本的出现的数字,例如 int a = 90;90便是整数常量,它有16进制,10进制和8进制三种表现形式。
16进制—以0x开头,常量中包含数字范围有0-9,a-f
例如 0xff, 0x89, 0xfb891023…
10进制—常量中包含数字范围0-9,但是不能以数字0作为开头
例如 90,123,3453454…
8进制—常量以0开头,常量中包含的数字范围0-7
例如 065, 056, 012…
如果没有特别的说明的话,编译器通常将整数常量当作int类型的数据处理,如果该值超出int类型取值范围,则将该常量当作unsigned int…以此类推。如果我们想要对该整数常量指定整数类型的话,可以按照如下操作.
909090U, 0123L, 0xffffUL… U为该整型常量指明无符号常量,L指定该常量为长整型,联合起来使用UL的意思是无符号的长整型变量。
(注: 整数处理难免会出现整数溢出的情况,有符号的整数溢出的行为在计算机中没有被定义,无符号的整数类型溢出的行为就是对2^x次方取模)

2、浮点类型

浮点类型通常就是我们所说的小数,例如1.2168465,它的类型根据其精度和范围(小数点后多少位)划分为:
float类型(单精度)
double类型(双精度)

表4 浮点类型的取值范围

类型 最小正值 最大值 精度
float 1.17549*10^-38 3.40282 * 10^38 6个数字
double 2.22507*10^-308 1.79769 * 10^308 15个数字

浮点常量

如何在计算机中表示浮点常量呢? 有多种书写格式,以下是12.5在程序中的有效的书写形式。
12.5 12.5e0 12.5E0 1.25e1 .125E2 .125e+2 125e-2
通常在默认情况下,浮点常量以double类型存储,如果需要向编译器指定该浮点常量以float形式存储的话,需要在其后面加一个f,例如12.5f。

3、字符类型

字符类型通常分为无符号类型和有符号类型,通常无符号字符型也被作为整数来进行操作,当char型变量与一个int型的数字相加时,编译器会自动的将char变量型转换成int类型变量。
表5 字符类型的取值范围

类型 最小值 最大值
char -128 127
unsigned char 0 255

4、类型转换

上一小节说到了当一个char型变量与一个int型变量相加时,编译器会自动的将char型变量转换成int类型变量,这个行为是编译器自动帮我们做,这个情况叫做隐式转换。还有一种是程序员自己主动做的,这种行为被叫做显示转换。
隐式转换规则通常较为复杂和晦涩,如果一个浮点类型的数与一个整形的数相加,这时整形的数被被编译器转换为浮点类型。如果一个short int 类型的数与int类型的数相加,此时short int类型的数被转换为int类型,等。
显式转换经常被使用,例如,通常很多情况下需要用到求百分比的程序,一个显示任务完成进度的进度条.

int nums = 90;
int Sum = 100;
int percent = (int)((float)nums / Sum * 100);

通过nums被强制转换成float类型,90.0/100 * 100 = 0.9 * 100,最后将((float)nums / Sum * 100)该值强制转换成int类型。如果直接使用nums/sum,你得到的结果只是0。

5、定义新的类型

如果你想要定义新的类型,可以使用typedef语法,例如通过typedef int myint, 这个可以使你的程序具备更好的移植性。

以上便是我对C语言的基本类型总结。

你可能感兴趣的:(嵌入式,c语言,c++)