c语⾔-数据类型、运算符与表达式
⼀、数据类型
1、概念
(1)标识符
1.定义:⽤来标记常量变量、函数及⽂件名字的字符序列。
2.构成规则:只能由数字、字母、下划线三部分组成,且不能以数字开头,并且严格区别⼤⼩写,不能定义为系统中存在的关键字。(2)关键字
c语⾔中具有特定含义、专门⽤作语⾔特定成分的⼀类标识符
注:在C语⾔中,所有的关键字都有固定的意义,不能⽤作其它,且所有的关键字都必须⼩写
(3)c的数据类型
数据是操作的对象,数据类型是指数据的内在表现形式(代码、存储、运算)
(4)常量和变量
1. 常量
【1】常量:在程序运⾏过程中,其值不能被改变的量
   常量区分为不同类型(表⽰形式),如:12、1.0、‘a’
【2】符号常量:⽤⼀个标识符代表的⼀个常量
定义⽅法:#define 标识符常量
#define PRICE 30
#include <stdio.h>
void main()
{
int num,total;
num = 10;
total = num * PRICE;
printf("total = %d",total);
}
2. 变量
【1】变量:其值是可以改变的量,它⽤标识符(变量名)来表⽰,在内存中占据⼀定的存储单元
变量的定义⽅法:类型符标识符
注意事项:<1>见名知意 <2>先定义后使⽤ <3>习惯上,符号常量名⽤⼤写,变量名⽤⼩写,以⽰区别【2】变量赋初值
变量先定义,后使⽤,⼀般放在函数开头
变量初始化:可以在定义时赋初值
2、整型数据
(1)整型常量
1. 各种进制的整数表⽰⽅法
⼗进制整数:由数字0~9和正负号表⽰. 如 123,-456,0
⼋进制整数:由数字0开头,后跟数字0~7表⽰. 如 0123,011
记住我⼗六进制整数:由0x开头,后跟0~9,a~f,A~F表⽰. 如 0x123,0xff
2. 整型常量的类型
【1】整型常量的值在-32768~+32767范围内,编译器认为是int类型
【2】整型常量的值超过上述范围,⽽在-2147483648 ~ +2147483647范围内,编译器认为是long类型
【3】当系统定义short int与int占内存长度相同,则两种类型常量均可以赋给 int和short int型变量
【4】在整型常量后⾯加⼤写L或⼩写l,则告诉编译器,把该整型常量作为long类型处理。例:123L、0L
【5】在整型常量后⾯加u,则按⽆符号整型⽅式存放,负数转换成补码再按⽆符号整型⽅式存放。
(2)整型变量
1. 整型数据在内存中的存放形式以⼆进制的补码表⽰,每⼀个整型变量在内存中占2个字节
【1】内存以字节为单元组成,每个字节有⼀个地址,⼀个字节⼀般由8个⼆进制位组成,每个⼆进位的值是0或1。【2】数值的表⽰⽅法——原码、反码和补码
原码:最⾼位为符号位,其余各位为数值本⾝的绝对值
反码:正数:反码与原码相同
    负数:符号位为1,其余位对原码取反
补码:正数:原码、反码、补码相同
    负数:最⾼位为1,其余位为原码取反,再对整个数加1负数补码转换成⼗进制数:最⾼位不动,其余位取反加1
补码:11111001
取反:10000110
加1:10000111=-7
补:整型数据的溢出
此情况称为“溢出”,运⾏时不报错,编程时要注意
2. 整型变量的分类
补:整数类型和取值范围
int            16位  -32768~32767
short int       16位  -32768~32767
long int          32位  -2147483648~2147483647 unsigned int      16位  0~65535
unsigned short int   16位  0~65535
unsigned long int    32位  0~4294967295
3. 整型变量的定义
int a,b;
long num,i,j;
unsigned short c,d;
#include <stdio.h>
void main()
{
int a,b,c,d;
unsigned u;
a = 12;
b = -24;
u = 10;  c = a + u;
d = b + u;
printf("a+u=%d , b+u=%d\n",c,d);
}
不同种类整型数据的运算
3、实型(浮点型)数据
(1)实型常量
1. 浮点数(float)⼜称为实数(real),有两种表⽰形式:
【1】⼗进制⼩数形式:必须有⼩数点  如 0.123 、.123 、123.0 、0.0 、123.
【2】指数形式:必须有e或E,e前e后必须有数字,且e后必须是整数  如 123.456e0、12.3456e1 、1.23456e2 、 0.123456e3 、0.0123456e4 等【3】类型:缺省 double
  后缀 f 或 F --> 为 float 型;后缀 l 或 L --> 为 long double 型
2. 浮点型常量的类型
浮点型常量⼀般按双精度64位处理,数后加 F 或 f 按单精度,浮点型常量不分 float 和 double。
(2)实型变量(取值范围与值的精度与机器有关)
单精度(float型):占4个字节,7位有效数字(3.4e-38~3.4e+38)
双精度(double型):占8个字节,15~16位有效数字(1.7e-308~1.7e+308)
long double型:占10个字节,15~16位有效数字(3.4e-4932~1.1e+4932)
float x,y;          (指定x、y为单精度浮点型变量)
double z;            (指定z为双精度浮点型变量)
long double t;(指定t为长双精度浮点型变量)
(3)实型数据的舍⼊误差
1. 浮点型数据在内存中的存放形式
浮点型数据在内存中占4个字节(32位),在内存中分成3部分,指数为2的幂次
2. 数据超过有效位数,则被舍去,故可能产⽣误差。要避免⼀个很⼤的数与⼀个很⼩的数加减
#include <stdio.h>
void main( )
{
float a , b;
a= 123456.789e5;
b= a+20;
printf("%f \n",b);      //12345678848.000000
}
浮点型数据的舍⼊误差
注:舍⼊误差使1.0/3*3 的结果并不等于1 !
4、字符型数据
(1)字符常量
1. 概念
【1】定义:⽤单引号括起来的单个字符或转义字符(如  ‘a’    ‘A’    ‘\n’    ‘\t ’ )
【2】字符常量的值:该字符的ASCII码值(如 ‘a’——97 ,‘A’——65 ‘\n’——10, ‘\t’——9)
【3】定义格式:char 变量名 = 值
char ch=65 与 char ch=‘A’ 与char=‘\101’是等效的
2. 转义字符:反斜线后⾯跟⼀个字符或⼀个代码值表⽰,特殊的字符常量,它们都以 ‘\’开头(代表⼀个字符)
#include <stdio.h>
void main( )
{  printf(“  ab  c\t de\rf\tg\n”);
printf(“h\ti\b\bj k”);
}
/*
显⽰结果:
f          gde
h        j k
*/
转义字符的使⽤
(2)字符变量
1. 字符变量⽤来存放字符,且只能存放⼀个字符,占⽤⼀个字节。
2. 定义⽅法: char c1,c2;  赋值⽅法:c1=‘a’ ; c2=‘\101’ (A); c3 = 0xff (255); c4='\377'(255);(3)字符数据存储
1. 以⼆进制存放字符的ASCII码值(0~255整数),与整数的存储形式类似
#include <stdio.h>
void main( )
{  char c1,c2 ;
c1=97 ;c2=98 ;
printf(“%c %c \n",c1,c2);  //a b
c1='a' ;c2='b' ;
printf(“%c %c \n",c1,c2);  //a b
}
2. 字符数据与整型数据可以相互赋值
3. 字符数据可以以字符或整数形式输出
#include <stdio.h>
void main( )
{  int i;
char c;
i = 'a'; c = 97;
printf(“%c %d \n",i,i);    // a  97
printf(“%c %d \n",c,c);    // a  97
}
补:
#include <stdio.h>
void main( )
{ char c;
c = '\376';
printf(“%c ,%d \n",c,c);  // ()  254
}