1.数据类型
(1)常量与变量
(2)c语言一共有32个关键字
(3)变量定义:数据类型 变量名(标识符)
变量赋值:变量名=值
(4)标识符命令规则:
1)不能是关键字
2)标识符只能由字母、数字、下划线组成
3)见名知义
4)第一个字符必须为字母或下划线
5)不能和同一函数内的其他标识符重复
6)标识符命名大小写
(5)常量定义:
1)const 数据类型 常量名
2)#define【宏定义】 常量名 数值
①注意;通过#define 定义的常量是根据值来匹配数据类型的
② const 修饰的常量是不安全的,可以通过指针来修改
2.进制
(1)二进制:逢二进一
二进制转化为十进制:
权值法:二进制各个位数乘以2的n次幂,结果相加
(2)十进制转化为二进制:除二取余法
(3)八进制和二进制转化:
(4) 十进制转化为八进制:除八取余法
(5)八进制转化为十进制:权值法
(6)八进制和二进制转化:一位对三位
(7)十进制转化为十六进制:除十六取余法
(8)十六进制转化为十进制:权值法
(9)十六进制和二进制转化:一位对三位
A-F字符不分大小写
3.进制在程序中打印:
int a=10;//十进制中的10
int b=010;//八进制中的10 在定义一个八进制数需要在数前面加上0区分
int c=0x10;//十六进制中的10 在程序中定义一个十六进制数需要在数前面加上0x区分
int d=0X10;//十六进制中的10 在程序中定义一个十六进制数需要在数前面加上0X区分
%d 将数据按照十进制输出
%o 将数据按照八进制输出
%x 将数据按照十六进制小写输出
%X 将数据按照十六进制大写输出
二、计算机内存数据存储方式
一个有符号的数据可以分为符号位和数据位
3、原码、反码、补码
一个有符号的整型数据可以分为两部分一部分是符号位、一部分是数字位
无符号数据类型只包含数字位部分
signed int a= 1986(有符号标识 signed可以不用写)
二进制:11111000010
1986原码:0000 0000 0000 0000 0000 0111 1100 0010
-1986原码:1000 0000 0000 0000 0000 0111 1100 0010
1986反码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1101
1986补码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1110
1 0000 0000 0000 0000 0000 0000 0000 0000
溢出:在数据进行操作的时候会导致超出数据类型大小,会向前位进1,多于原始数据类型大小,会被系统自动舍弃 保留从后面开始数据类型大小的位数
10+20
0000 1010
0001 0100
0001 1110
-10+-20
原码:1000 1010
反码:1111 0101
补码:1111 0110
原码:1001 0100
反码:1110 1011
补码:1110 1100
1111 0110
1110 1100
补码:1110 0010
反码:1110 0001
原码:1001 1110 16+8+4+2=-30
练习:用生辰年份年去生辰日期
1992
-326
1、将10进制转化为二进制
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :0000 0000 0000 0000 0000 0001 0100 0110
2、加符号位将数据变为原码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1000 0000 0000 0000 0000 0001 0100 0110
3、转化为反码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1001
4、将反码+1转化为补码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1010
5、计算补码
1992 :0000 0000 0000 0000 0000 0111 1100 1000
-326 :1111 1111 1111 1111 1111 1110 1011 1010
结果 : 1 0000 0000 0000 0000 0000 0110 1000 0010
6、将数据转化为10进制
110 1000 0010
2+128+512+1024 = 1666
无符号:
unsigned int a= 1986
无符号:1111 1111 1111 1111 1111 1111 1111 1111 =
0000 0000 0000 0000 0000 0000 0000 0000 =0
无符号整型取值:0-4294967295(2^32-1)
无符号的字符型:0-255
有符号:
int a= 1986
0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647
0000 0000 0000 0000 0000 0000 0000 0001
原码: 1111 1111 1111 1111 1111 1111 1111 1111 = -2147483647
反码:1000 0000 0000 0000 0000 0000 0000 0000
补码:1000 0000 0000 0000 0000 0000 0000 0001=-2147483647
-0的补码
补码:1000 0000 0000 0000 0000 0000 0000 0000=-0 = -2147483648
4、sizeof()
求出数据类型在内存中占的大小(BYTE)
int value =sizeof(变量名);
int value = sizeof(数据类型) sizeof 数据类型
注意:根据32位操作系统获取的数据类型大小
char(字符型)【1】<short(短整型)【2】
<=int(整型)【4】|float (单精度浮点型)【4】|long(长整型)【4】
<long long(长长整型)【8】|double(双精度浮点型)【8】
输出和输入:
输出字符的两种方式:
1、printf("%c",变量)
2、putchar(字符)
输入字符的两种方式:
1、scanf("%c",&b变量)
2、变量=getchar()
数值溢出:
char 1B=8bit
0x7f
0111 1111
0000 0010
1000 0001
1000 0000
1111 1111 -127
0xff
1111 1111
0000 0001
1 0000 0000
思考任务(课后练习)
-
八进制必须以__0___开头,十六进制必须以___0x____开头。
-
标识符只能由___数字____、__字母_____和__下划线_____组成。
-
在计算机中的进制表现形式有三种,分别是__十进制___、 __八进制_____、 _十六进制_______。
-
C 语言提供了 sizeof 运算符,该运算符主要用于__计算数据类型字节数______。
-
二进制和八进制相互转换
111 010 101 011 转换为八进制后结果为?
7253
76321 转换为二进制结果为?
?00010010101000100001?
-
二进制和十六进制相互转换
1111 1010 1101 1011 转换为十六进制后结果为?
fadb
a6b2f1 转换为二进制结果为?
1010 0110 1011 0010 1111 0001
-
请写出-8的原码、反码、补码
原码:1000 0000 0000 1000
反码:1000 0000 0000 1001
补码:1111 1111 1111 0110
-
计算如下程序结果
printf("%d\n", a); //结果为多少?
unsigned short a = 0xfffe;
printf("%u\n", a); //结果为多少?
printf("%d\n", a); //结果为多少?
unsigned short a = 0xffff + 5;
printf("%u\n", a); //结果为多少?
第四次学习笔记(c语言基础)
原文:https://www.cnblogs.com/bingger/p/10686981.html