学c记录(数据类型,运算符,表达式笔记)

整型数据

1.整型常量表示方法

八进制(0开头),十六进制(0X,0x开头),十进制

在程序中根据前缀区分各种进制

2.整型变量

内存二进制存储 一字节byte=8位bit

a.数值是以补码表示的

正数的补码和原码相同

负数的补码:将该数的绝对值的二进制形式按位数取反再加1

例如:-10补码

10的源码:00001010

取反: 11110101

+1: 11110110

b.整型变量的分类

1.基本型:类型说明符int

2.短整型:short int或short

3.长整型:long int或long

4无符号型:unsigned

占多少字节与系统和编译器规定有关

以下代码可查看对应字节

#include<stdio.h>
main()
{
	printf("%d",sizeof(int));
}

c.整型变量的定义

同类型说明符,变量名之间用“,”隔开,结尾用“;”

d.整型数据的溢出

由于字节大小,例如short int为2字节,有16位可存储位置为2的16次方为6536,又有正负,所以正数为6536÷2-1=32767(减去0这一个数),所以当让32767+1,则结果按补码形式为-32768,具体如下看

#include<stdio.h>
void main()
{
	short int a,b;
		a=32767;
		b=a+1;
     printf("%d,%d\n",a,b);
}

实型数据

1.实型常量的表示方法

实型也叫浮点型,实型常量也称实数或浮点数。在c语言中,实数只采用十进制,它有2种形式,十进制小数形式,指数形式

a.十进制形式:由数码0-9和小数点组成
b.指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能整数,可以带符号)组成

例:2.1E5(表示2.1*10的5次方)

2.实型变量的分类

单精度(float型),双精度(double型);长双精度(long double型)

3.在内存的存放形式

实数一般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如下:
在这里插入图片描述

小数部分跟平时理解小数部分,不太一样,不是指0.14159部分,而是把3.14159看成0.314159*10,故小数部分为“.314159”指数为1

4.实数的舍入误差

由于实数是由有限的存储单元组成的,因此能提供的有效数字总是有限的。

字符型数据

字符型数据就是字符。

1.字符型数据的表示

字符型数据是用单引号括起来的一个字符。例如:
‘a’、‘b’、’=’、’+’、’?’
都是合法字符型数据。

在C语言中,字符型数据有以下特点:

  • 字符型数据只能用单引号括起来,不能用双引号或其它括号。
  • 字符型数据只能是单个字符,不能是字符串。
  • 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如’5’和5 是不同的。'5’是字符型数据,不能参与运算。

2.转义字符

转义字符是一种特殊的字符。转义字符以反斜线""开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各示例中printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。

转义字符转义字符的意义ASCII代码
\n回车换行10
\t横向跳到下一制表位置9
\b退格8
\r回车13
\f走纸换页12
\反斜线符""92
单引号符39
\”双引号符34
\a鸣铃7
\ddd1~3位八进制数所代表的字符
\xhh1~2位十六进制数所代表的字符

广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母"A" ,\102表示字母"B",\134表示反斜线,\XOA表示换行等。

3.字符变量

字符变量的类型说明符是char。字符变量类型定义的格式和书写规则都与整型变量相同。例如:
char a,b;

a.字符变量在内存中的存储形式及使用方法

每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。

如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a、b赋予’x’和’y’值:
a=‘x’;
b=‘y’;
实际上是在a、b两个单元内存放120和121的二进制代码

整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。

4.字符串

字符串是由一对双引号括起的字符序列。例如: “CHINA” , “C program” , “$12.5” 等都是合法的字符串。字符串和字符不同,它们之间主要有以下区别:

a.字符由单引号括起来,字符串由双引号括起来。
b.字符只能是单个字符,字符串则可以含一个或多个字符。
c.可以把一个字符型数据赋予一个字符变量,但不能把一个字符串赋予一个字符变量。在C语言中没有相应的字符串变量,也就是说不存在这样的关键字,将一个变量声明为字符串。但是可以用一个字符数组来存放一个字符串
d.字符占一个字节的内存空间。字符串占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。

附ASCll码表

各类数值型数据间的混合运算

1.转换方法:自动转换和强制转换

2.自动转换规则

a.运算量不同则转换为同类型
b.按数据长度增加方向转换
c.所有浮点运算都以双精度进行
d.char型和short型参与运算,必须先转换为int
e.赋值运算中如果赋值号“=”两边的数据类型不同,赋值号右边的类型转换为左边的类型,当右边量数据类型长度比左边长时,将丢失部分数据,按四舍五入先前舍入,降低精度
#include<stdio.h>
#include <stdlib.h>
main()
{

	 float p=3.14159;
		 int s,r=5;
	 s=r*r*p;
	 printf("s=%d\n",s);
	 system("pause");
}

此处p为实型,s,r为整型,在执行s=r*r*p时,r和p都转换为double型,结果也为double型,但由于s为整型,所以赋值结果仍为整型,舍去小数部分,故结果为78

3.自动转换

a.形式(类型说明符)(表达式)
b.注意:(int)(x+y)与(int)x+y不同,前者先计算x+y再转,后者转x再与y相加,与数学计算法则类似

4.无论哪种转换都是临时性转换,不改变数据说明时定义的类型

ps:类型转换舍小数,赋值运算四舍五入

#include<stdio.h>
#include <stdlib.h>
main()
{

	 float p=3.9;	 
	 printf("int p %d\n",(int)p);
	 system("pause");
}

这里为强行转换,故结果为3

基本的算术运算符

1.加法运算符“+”:双目运算,右结合性
2.减法运算符“-”:双目运算,左结合性
3.乘法运算符“-”:双目运算,左结合性
4.除法运算符“-”:双目运算,左结合性,当参与量均为整型则结果为整型,舍去小数;当有一个为实型则结果为双精度实型

算术优先级与结合性

优先级:分15级,1级最高,15级最低,优先级高先运算
结合性:关于结合性,可理解为哪边优先运算

例如“=”为右结合性,则

#include<stdio.h>
#include <stdlib.h>
main()
{

	int a,b,c;
	b=2;
	c=1;
	a==c;
	printf("%d",a);
	system("pause");
}

改代码中a=b=c,是a先等于b还是先b=c呢,因为=为右结合性所以从右开始,c赋值给b,b再给a

优先级运算符结合性
1() [] ->
2! ~ ++ – = - * & sizeof
3* / %
4+ -
5<< >>
6< <= > >=
7== !=
8&
9……
10|
11&&
12||
13? :
14= += -= *= /= %= &= ^= |= <<= >>=
15,

ps:++i i自加1后在参与其他运算

i++ 则为i参与运算后再自增1

(–i和i–同)

ps:赋值中若有逗号,无括号则取最近
#include<stdio.h>
#include <stdlib.h>
main()
{

	int a=2,b=4,c=6,d=8,y;
    y=a,b,c,d;
	printf("y=%d",y);
	system("pause");
}

此时y=a

若有括号则最远
#include<stdio.h>
#include <stdlib.h>
main()
{

	int a=2,b=4,c=6,d=8,y;
    y=(a,b,c,d);
	printf("y=%d",y);
	system("pause");
}

此时y=d

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值