C语言 2.1

数据类型

C语言的变量: 1.使用前必须定义 2.确定类型

C语言的两个发展方向
1.C++/JAVA 对类型的检查更为严格(C允许自动转化)
2.JavaScript / PHP 不看重类型,甚至不需要事先定义

  1. 有利于更早的发现程序中的简单错误
  2. 迫使程序员更多的面对底层,实现而非事物逻辑
    早期语言强调类型,面向底层的语言强调类型

C语言需要类型,但对类型检查不够

  • 整数:char short int long ,long long
  • 浮点数:float double long double
  • 逻辑:bool
  • 指针
  • 自定义类型

char >1字节 long double >16字节
short >2字节 int > 4字节 double > 8字节
整形是二进制数(补码),浮点数是编码(不能直接运算)



sizeof(int);
sizeof(i);

sizeof()函数可以计算出占多少个字节

sizeof是静态的,编译后就产生结果,并不会产生可执行代码去做计算



CPU-----总线-----内存(RAM)

CPU中有寄存器(Reg),寄存器可以表达多少的数据,即为字长(每一次寄存器处理的数据)

int的大小即为寄存器的大小,即字长



表达负数的方法(补码)

一个字节可以表达的最大的数:
00000000>>11111111(0-255)

  1. 若希望-1+1=0,该如何做到
  2. 0---->00000000 1---->00000001
  3. 11111111+00000001=1 00000000
  4. -1=(1)00000000-00000001----->11111111
  5. 11111111被当作二进制看待时是255,被当作补码看待时是-1
  6. 同理对于-a,其补码就是0-a即2‘n-a,,n是这种类型的位数

补码的意义就是拿补码和原码相加可以得到一个带溢出的0



数的范围

  1. 对于一个字节(8位),可以表达的是00000000 - 11111111
  2. 其中00000000->0
  3. 00000001~01111111–>1 --127
  4. 11111111~10000000–>-1—128

unsigned的目的是为了做纯二进制的运算,为了移位



整数的输入输出

  • %d:int
  • %u:unsigned
  • %ld:long long
  • %lu:unsigned long long


字面量前有0是八进制 %o
字面量前有0x是十六进制 %x

只是如何把数字表达为字符串,与计算机内部如何表达数字无关



浮点类型

float 32bit=4字节
double 64bit=8字节

在这里插入图片描述
float-------------scanf %f------------------printf %f,%e(科学记数法) 5.67E+6
double---------scanf %lf-----------------printf %f,%e

%.16f 指定输出小数点后多少位

数字在计算机中的表达是离散的,所以使用double可能无法精确的表达一个数,而是最接近的



超过范围的浮点数

  1. printf 输出inf 表示输入的数超过范围(除以0,使用浮点数表达)
  2. printf 输出nan表示不存在的浮点数

float的字面量需要用f来表明身份

判断两个浮点数是否相等的方法

  1. 直接使用==可能失败
  2. 应当使用fabs(f1-f2)<1e-12 (小于可表达的精度即可)


浮点数在计算机内部使用编码的形式表达
在这里插入图片描述



** bool类型**

以前c是没有bool类型的,使用0 1

  • #include<stdbool.h>
  • 之后就可以使用true和false
bool b=6>5;
bool t=true;
printf("%d\n",b);   //输出1


逻辑运算

在这里插入图片描述

4<x<6不是C能正确计算的式子,因为4<x得到的是一个逻辑值------>x>4&&x<6

  • 判断一个字母是否是大写字母 x>=‘A’&&x<=‘Z’
  • !a<20 --单目运算符!会先做,即a为0会先变成1,a不为0会先变成0
  • !(a<20)


优先级
在这里插入图片描述
赋值运算是从左向右进行的

  • 对于&&,如果左边是false,就不做右边了
  • 对于||,如果左边为true,就不做右边了

不要把赋值写进表达式



自动类型转换

  • 当运算符的两边出现不一样的类型时,会自动转换为较大的类型

  • char—short—int—long—long long

  • int-float—double

  • printf会把任何小于int的当作int输出,浮点数当作double

  • scanf不可以需要%hd,%d,%ld,%f,%lf

强制类型转化

int10.2;
(int)i;   
  • 强制类型转换并不会改变变量的值
  • 强制类型转换的优先级高于四则运算 int i=(int)(a/b)


条件运算符

count=(count>20)?count-10:count+10;

条件运算符的优先级仅高于赋值运算符



逗号运算符

  • 以右边的值,作为式子的结果(优先级比赋值还低)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值