数据类型与运算符

标识符:程序中用来为变量和函数命名的字符串
标识符的规则就是:
第一:标识符由数字字母下划线组成,
第二:数字不能做开头
第三:不能和关键字重名
第四:区分大小写
变量和常量:
变量:程序运行过程中值会改变的量
常量:程序在运行的过程中值不会改变的量
变量的定以和初始化:
定以格式:
数据类型 变量名; int num; char num; float num; double num; int num[5]; int *num; struct mystruct{}num; union mysunion{}num; enum myenum{}enum;
该格式中包含了一下的关键点需要注意:
1、变量的名字 ----变量的名字就是一个合法的标识符
2、变量的数据类型 ----除去变量名部分,剩余的就是变量的数据类型
3、变量中存储数据的类型 ----定变量的时候出现的基本的数据类型就是存储数据的类型但是结构体、共用体、枚举除外
输入输出:
printf(“格式控制符”,输出列表)
当printf中出现了运算操作的时候,执行的顺序是从右到左
scanf(“格式控制符”,输入列表)

格式控制符:
%d:
%f:
%c:
%s:
%o:
%x:
%u:
%l:
%e:
%lu:
%p:
转移字符:
以\开头的符号被称为转义字符
\n:换行
\t:一个制表符

运算符:
运算符:就是对数据进行处理所在意的具有每种功能的符号
由运算符参与的运算中还包括操作数
操作数:就是参与运算的表达式或者数据
表达式:由操作数和运算符组成的式子

运算符的分类:
从操作数划分:
单目运算符
双目运算符:
三目运算符:
从功能划分:
逗号运算符: ,
起到分割的作用
int num;int m;int num,m;

#include <stdio.h> 
int main() 
{  
int m=10,n=20;  
int num=(1,2,3,4,5);  //int num1=1,2,3,4,5;//不合法  
printf("m=%d\tn=%d\n",m,n);  
printf("m=%d\t\n",num);  //printf("m=%d\t\n",num1);  
return 0; 
}

赋值运算符: =
赋值运算符的作用是将赋值符号右侧的表达式或者数据赋值给左侧的变量
左值:(左值无效)
左值是用来指明一个对象的表达式。最简单的左值就是变量名称。左值(lvalue)之所以称为“左”(以首字母为 L,代表 left),是因为一个左值表示一个对象,它可以出现在赋值运算符(assignment operator)的左边,例如“左表达式=右表达式”。
其他表达式(那些表示一个值但不指明一个对象的),被类似地称为右值(rvalue)。右值是可以出现在赋值运算符右边而不是左边的表达式。例如,常量和算术表达式。
左表达式=右表达式提示:一定要区分 =(赋值符号)和 == (等于号)
算数运算符:
符号:+ - * / %
算术运算符中有两个单目运算符(正、负)以及五个双目运算符(乘法、除法、取模、加法、减法),其中单目运算符的优先级最高。
其中取模运算符 % 意为计算两个整数相除得到的余数,即求余数。
/:求商运算,只获取两个数值的商
1-1/2+1/3-1/4+1/5
隐式转换:在程序执行的过程中若出现算术运算就会涉及到隐式转换

int m=10,n=3;
10/3=3
int a=10;
float b=2.2;
a*b;

对于双目算术运算符,当参与运算的两个变量类型相同时,不发生 类型转换 ,运算结果将会用参与运算的变量的类型容纳,否则会发生类型转换,以使两个变量的类型一致。
转换的规则如下:
向高精度类型转换
先将 char , bool , short 等类型提升至 int (或unsigned int ,取决于原类型的符号性)类型;
若存在一个变量类型为 long double ,会将另一变量转换long double 类型;
否则,若存在一个变量类型为 double ,会将另一变量转换为double 类型;
否则,若存在一个变量类型为 float ,会将另一变量转换为float 类型;
否则(即参与运算的两个变量均为整数类型):
若两个变量符号性一致,则将位宽较小的类型转换为位宽较大的类型;
否则,若无符号变量的位宽不小于带符号变量的位宽,则将带符号数转换为无符号数对应的类型;
否则,若带符号操作数的类型能表示无符号操作数类型的所有值,则将无符号操作数转换为带符号操作数对应的类型;
否则,将带符号数转换为相对应的无符号类型。

#include <stdio.h>
 int main()
  { 
   int m=10,n=20;  
   //加法 
   printf("和=%d\n",m+n); 
 //减法 
    printf("差=%d\n",m-n); 
 //乘法 
   printf("积=%d\n",m*n);
 //除法  
    printf("商=%d\n",m/n);
 //求余数
    printf("余数=%d\n",m%n);  return 0;
 }

%:求余运算,获取两个数的余数
被除数÷除数=商……余数
求余运算获取的结果的符号和被除数保持一致

#include <stdio.h> 
int main() 
{
  int m=20,n=6;  
  int a=-20,b=6;  
  int c=-20,d=-6;  
  int f=20,g=-6;  
  //求余数  
  printf("m对n求余=%d\n",m%n);  
  printf("a对b求余=%d\n",a%b);  
  printf("c对d求余=%d\n",c%d);  
  printf("f对g求余=%d\n",f%g);  
  return 0; 
  }

关系运算符:

大于
= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于
关系运算符参与的表达式会有一个结果被返回,结果为真或加
C语言中规定非0即为真,0为假 (通常用1标识真)
5 > 6 ×
5 < 6 √

#include <stdio.h> 
int main() 
{
	  int m=20,n=6;  
	  int result=m>n;  
	  int res=m<n;  
	  printf("result=%d\n",result);  
	  printf("res=%d\n",res); 
	  printf("m!=n:%d\n",m!=n); 
 	  printf("m=n:%d\n",m==n); 
	  return 0; 
  }

提示:关系表达式通常作为流程控制语句中的分支语句的条件存在

if(m>n)
printf("m>n\n");
else
printf("m<n\n");

逻辑运算符:
运算符 功能
&& 逻辑与
|| 逻辑或
! 逻辑非
逻辑运算符中存在三个:
(表达式1)&&(表达式2):若&&两侧的表达式都为真,则结果为真,否则为假

#include <stdio.h> 
int main() 
{
int m=20,n=6;  
if((m>n) && (n>m))   /*if为一个条件语句,当if后面的括号内的结果为真的时候执行if下面的大括号内的语句,否则执行else下的大括号内的语句*/  
{
printf("if语句的条件之为真\n");  
}  
else
{
 printf("if语句的条件之为假\n");  
 }    
 return 0; 
 }

(表达式1)||(表达式2):若&&两侧的表达式有一个为真,则结果为真,否则为假

#include <stdio.h> 
int main() 
{
int m=20,n=6;  
if((m>n) || (n>m))   /*if为一个条件语句,当if后面的括号内的结果为真的时候执行if下面的大括号内的语句,否则执行else下的大括号内的语句*/  
{   
printf("if语句的条件之为真\n");  
}  
else
{   
printf("if语句的条件之为假\n");  
}    
return 0; 
}

!(表达式):表达式为真结果为假,表达式为假结果为真

#include <stdio.h> 
int main() 
{  
int m=20,n=6;  
if(!((m>n) && (n>m)))   /*if为一个条件语句,当if后面的括号内的结果为真的时候执行if下面的大括号内的语句,否则执行else下的大括号内的语句*/  
{   
printf("if语句的条件之为真\n");  
}  
else
{
printf("if语句的条件之为假\n");  
}    
return 0; 
}

位运算符:
运算符 功能
~ 逐位非
& (双目) 逐位与
| 逐位或
^ 逐位异或
<< 逐位左移

逐位右移
&:位与运算符,参与位运算的操作数有两个
全一出一,有0出0
1010
& 1101


1000

#include <stdio.h> 
int main() 
{  
int m=10,n=13; 
 printf("m&n=%d\n",m&n);    
 return 0; 
 }

|:位或运算符,参与位运算的操作数有两个
有1出1,全0出0
1010

1101

1111

#include <stdio.h> 
int main() 
{  
int m=10,n=13;  
printf("m|n=%d\n",m|n);    
return 0; 
}

~:按位取反,参与按位取反的操作数为1个
0变1 1变0
~1101=0010
^:异或运算符,参与异或运算的操作数有两个
不同为1相同为0
1010
^ 1101

0111

#include <stdio.h> 
int main() 
{
int m=10,n=13;  
printf("m^n=%d\n",m^n);    
return 0; 
}

:右移运算符,操作数有两个,通常是元数据在左侧,右侧是移动的位数
data >> n
右移n位结果为data数据右侧数据去掉n为左侧补n个0
10101100 >> 4 = 00001010
<<:左移运算符,操作数有两个,通常是元数据在右侧,左侧是移动的位数
n << data
左移n位结果为data数据(位数在32以内)右侧补n个0
4<<10101100 = 101011000000
10101100 >> 4 = 00001010
提示:
左移运算相当于在元数据的基础之上乘以2n,右移运算相当于在原始数据之上除以2n求商
自增自减运算符:
++:自增运算符
–:自减运算符
自增自减运算符增减的单位都为1
前置自增自减:前置就是运算在变量或者表达式的前面
前置运算符的特点是先自身加(减)1,再参与其他运算
后缀自增自减:后置就是运算符在变量或者表达式的前面
后置运算符的特点是先参与其他运算,再自身加(减)1

#include <stdio.h> 
int main() 
{
int num=10; 
int m=num++;//先将num的值赋值给m,然后num自身+1
int n=++num;//先将num自身+1,然后再将num值赋值给n 
printf("m=%d\tn=%d\n",m,n);  printf("num=%d\n",--num);//先将num-1,再打印 
printf("num=%d\n",num--);//先打印,再将num-1  return 0; 
}

复合运算符:
所谓的复合运算符指的是所有的运算符和赋值运算符结合产生的组合运算符

==
+=:先加后赋值
-=:先减后赋值
/=:先除后赋值
*=:先乘后赋值
&=:先与后赋值
|=:先或后赋值
int num=10;
num+=1;等同于num=num+1;

sizeof运算符:
求变量和数据类型的大小

#include <stdio.h> 
int main() 
{
int num=10; 
printf("sizeof(int)=%lu\n",sizeof(int));  
printf("sizeof(num)=%lu\n",sizeof(num));  
return 0; 
}

三目运算符:
(表达式)?(结果1):(结果2)
若表达式结果为真,结果区结果1,否则取结果2
注意:只取一个值,另一个不做任何操作

#include <stdio.h> 
int main() 
{  
int a = 0, b = 0, c = 0,max=0;  
scanf("%d%d%d", &a, &b, &c);  
max = (a > b) ? a : b;  
max = (max > c) ? max : c;  
printf("max=%d\n", max);  
return 0; 
}

运算符的优先级:

类型转换:
强制类型转换:
人为干预,将数据的类型从一种转换到另一种类型
格式:
(强制转换后的数据类型)变量名
int num=1.2345;
隐式类型转换:
多指在程序运行的过程中,因为数据类型的前后不一致导致后面的数据类型向前面的数据类型转换

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{  
int num = 1.123;//隐式类型转换  
printf("num=%d\n", num);  
printf("num=%d\n", (int)1.123);//强制类型转换  
printf("num=%d\n", 1.123);//错误形式,不能使用%d直接对浮点型类型数据进行输出操作,数据会丢失  system("pause");  
return 0;   
}

请使用#define定义一个宏用来标识一年有多少秒

#define second 365*24*60*60L

int :int类型为整型,占据数据的空间最大为4字节(32位环境),在16位环境下为2字节
long :long也可以存整型,但是long至少为4字节(16位和32位环境一致),64位下8字节

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{
  int num = 123456789;  
long int num1 = 123456789L;  
float m = 1.234f;  
printf("num=%d\tnum1=%d\n", num, num1);  
system("pause");  
return 0; 
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值