C语言数据类型

常量与变量

关键字

数据类型

数据类型的作用:编译器预算对象(变量)分配的内存空间大小。

常量

常量:

  1. 在程序运行过程中,其值不能被改变的量
  2. 常量一般出现在表达式或赋值语句中

整型常量

100,200,-100,0

实型常量

3.14 , 0.125,-3.123

字符型常量

‘a’,‘b’,‘1’,‘\n’

字符串常量

“a”,“ab”,“12356”

变量

变量:

  1. 在程序运行过程中,其值可以改变
  2. 变量在使用前必须先定义,定义变量前必须有相应的数据类型

标识符命名规则:

  1. 标识符不能是关键字
  2. 标识符只能由字母、数字、下划线组成
  3. 第一个字符必须为字母或下划线
  4. 标识符中字母区分大小写

变量特点:

  1. 变量在编译时为其分配相应的内存空间
  2. 可以通过其名字地址访问相应内存

声明和定义的区别:

  1. 声明变量不需要建立存储空间,如:extern int a;
  2. 定义变量需要建立存储空间,如:int b;
#include <stdio.h>

int main()

{

//extern 关键字只做声明,不能做任何定义,后面还会学习,这里先了解

//声明一个变量a,a在这里没有建立存储空间

extern int a;

a = 10; //err, 没有空间,就不可以赋值


int b = 10; //定义一个变量b,b的类型为int,b赋值为10



return 0;

}

 上面的程序中:

  1. int b 它既是声明,同时又是定义
  2. 对于 extern b来讲它只是声明不是定义

 一般的情况下,把建立存储空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。

示例:

#include <stdio.h>

#define MAX 10 //声明了一个常量,名字叫MAX,值是10,常量的值一旦初始化不可改

int main()

{

int a; //定义了一个变量,其类型为int,名字叫a

const int b = 10; //定义一个const常量,名为叫b,值为10

//b = 11; //err,常量的值不能改变

//MAX = 100; //err,常量的值不能改变

a = MAX;//将abc的值设置为MAX的值

a = 123;

printf("%d\n", a); //打印变量a的值

return 0;

}

整型:int

整型变量的定义和输出

打印格式

含义

%d

输出一个有符号的10进制int类型

%o(字母o)

输出8进制的int类型

%x

输出16进制的int类型,字母以小写输出

%X

输出16进制的int类型,字母以大写输出

%u

输出一个10进制的无符号数

#include <stdio.h>

int main()
{
	int a = 123;	//定义变量a,以10进制方式赋值为123
	int b = 0567;	//定义变量b,以8进制方式赋值为0567
	int c = 0xabc;	//定义变量c,以16进制方式赋值为0xabc

	printf("a = %d\n", a);
	printf("8进制:b = %o\n", b);
	printf("10进制:b = %d\n", b);
	printf("16进制:c = %x\n", c);
	printf("16进制:c = %X\n", c);
	printf("10进制:c = %d\n", c);

	unsigned int d = 0xffffffff; //定义无符号int变量d,以16进制方式赋值
	printf("有符号方式打印:d = %d\n", d);
	printf("无符号方式打印:d = %u\n", d);
	return 0;
}

整型变量的输入与输出 

#include <stdio.h>

int main()
{
	int a;
	printf("请输入a的值:");

	//不要加“\n”
	scanf("%d", &a);

	printf("a = %d\n", a); //打印a的值

	return 0;
}

 shortint、longlong long

数据类型

占用空间

short(短整型)

2字节

int(整型)

4字节

long(长整形)

Windows为4字节,Linux为4字节(32位),8字节(64位)

long long(长长整形)

8字节

注意:

  1. 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。
  2. 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

打印格式

含义

%hd

输出short类型

%d

输出int类型

%ld

输出long类型

%lld

输出long long类型

%hu

输出unsigned short类型

%u

输出unsigned int类型

%lu

输出unsigned long类型

%llu

输出unsigned long long类型

有符号数和无符号数区别

1) 有符号数

有符号数是最高位为符号位,0代表正数,1代表负数。

#include <stdio.h>

int main()

{

signed int a = -1089474374; //定义有符号整型变量a

printf("%X\n", a); //结果为 BF0FF0BA

//B       F      0        F       F     0        B       A

//1011 1111 0000 1111 1111 0000 1011 1010

return 0;

}

2) 无符号数

无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。

#include <stdio.h>

int main()

{

unsigned int a = 3236958022; //定义无符号整型变量a

printf("%X\n", a); //结果为 C0F00F46

return 0;

}

3) 有符号和无符号整型取值范围

数据类型

占用空间

取值范围

short

2字节

-32768 到 32767 (-215 ~ 215-1)

int

4字节

-2147483648 到 2147483647 (-231 ~ 231-1)

long

4字节

-2147483648 到 2147483647 (-231 ~ 231-1)

unsigned short

2字节

0 到 65535 (0 ~ 216-1)

unsigned int

4字节

0 到 4294967295 (0 ~ 232-1)

unsigned long

4字节

0 到 4294967295 (0 ~ 232-1)

 sizeof关键字

  1. sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节,sizeof是一个运算符
  2. sizeof的返回值为size_t
  3. size_t类型在32位操作系统下是unsigned int,是一个无符号的整数

字符型char

字符变量的定义和输出

字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来。

字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型

#include <stdio.h>

int main()
{
	char ch = 'a';
	printf("sizeof(ch) = %u\n", sizeof(ch));

	printf("ch[%%c] = %c\n", ch); //打印字符
	printf("ch[%%d] = %d\n", ch); //打印‘a’ ASCII的值

	char A = 'A';
	char a = 'a';
	printf("a = %d\n", a);		//97
	printf("A = %d\n", A);	//65

	printf("A = %c\n", 'a' - 32); //小写a转大写A
	printf("a = %c\n", 'A' + 32); //大写A转小写a

	ch = ' ';
	printf("空字符:%d\n", ch); //空字符ASCII的值为32
	printf("A = %c\n", 'a' - ' '); //小写a转大写A
	printf("a = %c\n", 'A' + ' '); //大写A转小写a

	return 0;
}

 转义字符

转义字符

含义

ASCII码值(十进制)

\a

警报

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符"\"

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\?

代表一个问号

063

\0

数字0

000

\ddd

8进制转义字符,d范围0~7

3位8进制

\xhh

16进制转义字符,h范围0~9,a~f,A~F

3位16进制

实型(浮点型)float、double

       实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比 float 型变量更精确。由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型。

#include <stdio.h>

int main()
{
	//传统方式赋值
	float a = 3.14f; //或3.14F
	double b = 3.14;

	printf("a = %f\n", a);
	printf("b = %lf\n", b);

	//科学法赋值
	a = 3.2e3f; //3.2*1000 = 3200,e可以写E
	printf("a1 = %f\n", a);

	a = 100e-3f; //100*0.001 = 0.1
	printf("a2 = %f\n", a);

	a = 3.1415926f;
	printf("a3 = %f\n", a); //结果为3.141593

	return 0;
}

 C语言如何表示相应进制数

十进制

以正常数字1-9开头,如123

八进制

以数字0开头,如0123

十六进制

以0x开头,如0x123

二进制

C语言不能直接书写二进制数

#include <stdio.h>

int main()
{
	int a = 123;		//十进制方式赋值
	int b = 0123;		//八进制方式赋值, 以数字0开头
	int c = 0xABC;	//十六进制方式赋值

	//如果在printf中输出一个十进制数那么用%d,八进制用%o,十六进制是%x
	printf("十进制:%d\n",a );
	printf("八进制:%o\n", b);	//%o,为字母o,不是数字
	printf("十六进制:%x\n", c);

	return 0;
}

 

计算机内存数值存储方式

 原码

一个数的原码(原始的二进制码)有如下特点:

  1. 最高位做为符号位,0表示正,为1表示负
  2. 其它数值部分就是数值本身绝对值的二进制数
  3. 负数的原码是在其绝对值的基础上,最高位变为1

下面数值以1字节的大小描述:

十进制数

原码

+15

0000 1111

-15

1000 1111

+0

0000 0000

-0

1000 0000

原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。

反码

  1. 对于正数,反码与原码相同
  2. 对于负数,符号位不变,其它部分取反(1变0,0变1)

十进制数

反码

+15

0000 1111

-15

1111 0000

+0

0000 0000

-0

1111 1111

反码运算也不方便,通常用来作为求补码的中间过渡。

 补码

在计算机系统中,数值一律用补码来存储。

补码特点:

  1. 对于正数,原码、反码、补码相同
  2. 对于负数,其补码为它的反码加1
  3. 补码符号位不动,其他位求反,最后整个数加1,得到原码

十进制数

补码

+15

0000 1111

-15

1111 0001

+0

0000 0000

-0

0000 0000

#include <stdio.h>

int main()
{
	int  a = -15;

	printf("%x\n", a);
	//结果为 fffffff1
	//fffffff1对应的二进制:1111 1111 1111 1111 1111 1111 1111 0001
	//符号位不变,其它取反:1000 0000 0000 0000 0000 0000 0000 1110
	//上面加1:1000 0000 0000 0000 0000 0000 0000 1111  最高位1代表负数,就是-15

	return 0;
}

 数值溢出

当超过一个数据类型能够存放最大的范围时,数值会溢出。

有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失。

数据类型

占用空间

取值范围

char

1字节

-128到 127(-27 ~ 27-1)

unsigned char

1字节

0 到 255(0 ~ 28-1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值