学习目标:
一、变量
【1】定义【2】变量的初始化和赋值【3】类型转换【4】变量的取值范围
二、标准输入输出函数【1】printf 【2】sacnf【3】字符的输入函数getchar()【4】字符的输出函数 putchar()
三、运算符
【1】算术运算符【2】自增自减运算符
学习内容:
一、变量
【1】定义
存储类型 数据类型 变量名; //在日常写代码的过程中存储类型一般省略 变量名是一个标识符,要符合标识符的命名规范
标识符的命名规范:
- 由数字、字母和下划线构成
- 不能以数字开头
- 严格区分大小写
- 不能和C语言的32个关键字重复
ii)存储类型
【2】变量的初始化和赋值
初始化,在定义的直接给初始值
赋值,先定义后赋值
【3】类型转换
i)隐式的强制类型转换
转换的过程是编译器做的
ii)显式强转
格式:(强转的目标类型)强转的数据;
iii)有符号和无符号数之间的转换
隐式的强制类型转换,无符号数和有符号数一起运算,强转成无符号数
【4】变量的取值范围
有符号数signed、无符号数unsigned
默认都是有符号数
根据数据的最高位是符号位,0表示是正数,1表示负数
原码、反码和补码
计算机中,数据都是以补码的形式进行存储和运算。
都是二进制表示的
原码:人能看懂的,十进制转换过来的
反码:原码和补码的一个中间状态 ,正数原码、反码和补码都一样,负数,原码的除符号位外其他位取反
补码:计算机中存储和运算用的都是补码,正数原码、反码和补码都一样,负数的补码是反码+1
正数的原反补都相同
负数的反码是原码除符号位外取反,补码是反码+1
有符号数 -123 +123
原码1111 1011 0111 1011
反码1000 0100 0111 1011
补码1000 0101 0111 1011
i)char 1Byte
无符号数[0,255] ---- [0,2^8-1]
有符号数 [-2^7,2^7-1]
[0000 0000 ----- 0111 1111] ----- [0,2^7-1]
[1111 1111 ----- 1000 0000] ------ [-2^7,0]
1000 0000 ------> 1111 1111 -----> 1 0000 0000 -0的补码 1000 0000 规定 1000 0000是-128的补码,-128没有原码和反码,-128补码的最高位,既是符号位也是数据位。
127 补 0111 1111 + 1 补码0000 0001 = 1000 0000
1 0000 0001
-1 1111 1111
0000 0001
1111 1111
0000 0000
计算机中数据存储的时候看的是数值(有无符号)
取出数据,看类型;
ii)short 2Byte 16bit
无符号数[0,2^16-1]
有符号数 [-2^15,2^15-1]
正数[0,2^15-1]
负数[-2^15,0]
1000 0000 0000 0000
iii)int 4Byte 32bit
无符号数[0,2^32-1]
有符号数 [-2^31,2^31-1]
正数[0,2^31-1]
负数[-2^31,0]
1000 0000 0000 0000 0000 0000 0000 0000
补码是通过模运算得来的。
练习:
124,原码、反码和补码0111 1100
-35:1010 0011 -----> 1101 1100 ----->1101 1101
-126:1111 1110 -----> 1000 0001 ------> 1000 0010
-96:1110 0000 ----> 1001 1111 -----> 1010 0000
-24:1001 1000 ------> 1110 0111 ------> 1110 1000
-123:1111 1011 ------> 1000 0100 ------> 1000 0101
-115:1111 0011 ------> 1000 1100 ------> 1000 1101
二、标准输入输出函数
【1】printf
【2】sacnf
ii)scanf在获取多个字符数据时,需要吸收垃圾字符
【3】字符的输入函数getchar()
getchar()从终端 获取单个字符
getchar(); //语句本身的结果就是从终端获取的字符
char c;
scanf("%c",&c); //通过scanf终端获取c
c=getchar(); //通过getchar终端获取c
【4】字符的输出函数 putchar()
输出单个字符
三、运算符
【1】算术运算符
运算符 | 作用 |
+\-\* | 两数相加、相减、相乘 |
/ | 如果左右两个操作数都是整形,就是取整运算,结果就是整形 如果有一个操作数是浮点型,结果就是浮点型,除数不能为0 |
% | 要求:两个操作数必须是整形,取余,除数不能为0 |
【2】自增自减运算符
a++,++a,a--,--a
int a = 10; a++或者是a--表达式的结果仍然为10
++a,结果就是11
如果先看见运算符,结果就是运算后的值
如果先看见变量,结果就还是变量本身
练习:
1、使用带参宏实现,两数相乘*,两数相除/,两数模除%
- 整理思维导图
- 有以下变量求输出结果
signed char c = 178;
printf("%d\n",c);
printf("%u\n",c);
unsigned char d = -9;
printf("%d\n",d);
printf("%u\n",d);
并写出数据存储和取出的过程
3.求-57的原码、反码和补码