第二章2.2
数据类型 运算符 表达式的介绍
VC的使用方法
运算符 sizeof()也是个运算符
本节:
- 实型数据
- 字符型数据
- 字符串数据
- 变量赋值
- 数据型数据之间混合运算
实型数据
简单来说是浮点型数据
0.12
3.1415926
数据值之间的混合运算:
低精度 -----> 高精度
char,short - >int ->unsigned ->long ->double <-float
运算符
//
// main.c
// project1
//
// Created by sihan guo on 2019/06/13.
// Copyright © 2019 sihan guo. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
//sizeof() +-
//十进制浮点型表示形式
0.12;
3.1415926;
//指数形式表示
//128e2 ==> 168*10^2 = 168*10 = 16800;
//168E+2
//168E-2 ==> 168*10^(-2) = 1.68
float abc = 168E-2;
printf("abc = %f\n",abc);
//实型变量
//float 单精度变量,一般提供七位有效数字(保守估计6位)
//double 双精度变量(15到16位有效数字)根据不同机器而异
float d,e,f;
double i,k;
//浮点型在内存中都是以指数形式储存的
123456.678; //10000.0 --只有一位有效数字导致此结果的发生
//12000.0 --有两位有效数字
//12300.0 --有三位有效数字 --以上是精度问题
//12345.67X --这是有七位有效数字导致此结果
0.1234; //0.1XXXX --只有一位有效数字
//0.12XXXX --有两位有效数字导致此结果
//演示浮点数
//float af;
//double bf;
//af = 1111.111; //float 7/8位 只能显示前7位 后面只能随便显示
//bf = 1111111.111; //double 16位 保存有效位数更多
//bf = 1234567898.1234;
//printf("af = %f\n",af); //af = 1111.110962 输出结果 导致失去精度 范围很大 但是精度并不高
//printf("bf = %f\n",bf); //bf = 1234567898.123400
//printf("断点\n");
float af = 12.45665345756757656;
double ad =12.45665345756757656;
printf("af = %.20f\n",af);//可以加精度 这个意思是后面增加了20的精度 =12.45665359497070312500
printf("ad = %.20f\n",ad);//12.45665345756757602658 %f输出的是10进制形式的浮点数
float af1 = 0.5;
float af2 = 0.51;//计算机内部是二进制保存 但是又会显示十进制数字 等于说转存了两次
//10/3 = 0.33333333 *3 -> 0.9999999999 到不了10 会损失精度
//字符型数据
//常规字符:用单引号引起来的 一个 引起来
'a';'$';'b';
//特殊字符:转义字符 以\开头的字符序列 \n 换行
'\n';
//表示一个引号
'\'';
//反斜杠本身
'\\';
//双引号
'\"';
'\n';//c此处换行
//字符变量只能保存一个字符 因为一个字符变量在内存中只能占一个字节
char x1,x2,x3;
x1 = 'a';//实际上把字符的对应的ascii码方式放在变量所代表的内存中去
x2 = 'b';
x3 = '\'';
char c1,c2;
c1 = 97; //a
c2 = 98; //b
printf("c1:%c,c2:%c\n",c1,c2);//%c是以字符的形式输出
c2 = c2 + 4;//c2 = 102 ---->'f'
printf("c1:%c,c2:%c\n",c1,c2);
//字符串常量:用一对双引号引起来的一堆字符(可以是一个字符 也可以多个字符)
//printf("老师你好");
//'s'是字符型常量 "s"是字符串常量
//字符串变量
//char c;
//c = 'a';
// c = "a"; 这样是不对的
// \0是字符串标记 但是并不是\0输出出来
//变量赋初值
//int a = 3;
int a,b,w = 6;//只给w赋值 对于没赋值的变量 值是不确定的 大家不能随意拿来用
//变量是必须先进行定义变量
//数据值类型之间的混合运算
//此时int型转化成double型 低精度转换成高精度的数据类型
int x = 1;
int y = 2.80;
int z = x + y;
//运算符和算数表达式
//+ - * / %(取余)也叫模运算
printf("除法表达式结果为:%d\n",5/3); //两个整数相除 系统会舍弃小数部分
printf("取余表达式结果为:%d\n",5%3);//取余
//优先级问题 先乘除 后加减
//如果优先级相同 则按照优先级先算左面 后右面的方式来处理(从左到右的原则)
//赋值运算符
int p;
p = 4 + 3;//等于说把等号右边值付给左边的变量 ==>i= (4+3);因为加法优先级比等号要高
//括号的优先级最高
//强制类型转换运算符 讲一个表达式转换成需要的类型
int m = 10;
double n;
n = (double)m;//这属于强制运算符 但是m类型本身并有变化
//(int)(x+y);将x+y的值转化成为整型
//(float)(5%3);讲5%3转化成float型
//总结强制h转换运算符成一般形式
//(类型名)(表达式)
//int(x) 这么写是可以的 但是不建议写
float ab;
int ac;
x = 3.6f;
i = (int)x;//此时恐怕丢失数据 强制类型转换 此时就会不报警报
//两种类型转换
//(1)自动类型转换 系统替你进行数据类型转换
//(2)强制类型转换 当自动类型转换无法达到目的时就用强制类型转换
//(3)%取余(其两侧都需要整数) 所以说必须得进行强制类型转换
i= (int)x % 3;
//(4)自增自减操作符 ++(自增) --(自减)
//只能用于变量 不可以用到变量或者表达式
int g = 6;
++g;//先加后用
--g;
g++;//先用后加
g--;
printf("g++的结果是%d\n",g++);//先进行赋值 再进行自加
printf("++g的结果是%d\n",++g);//先进行自加 再进行赋值
//减减也是同理
//表达式: 用+-*/ 串起来的一个式子
// -i++ ==> -(i++)
// i+++j ==> (i++)+j
//C语言在编辑时,会尽多可能的从左到右将若干个字符组成一个运算符
//printf("111111111111\n");
//printf("222222222222\n");
return 0;
}