第四次学习笔记(c语言基础)

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
 

思考任务(课后练习)

  1. 八进制必须以__0___开头,十六进制必须以___0x____开头。
  2. 标识符只能由___数字____、__字母_____和__下划线_____组成。
  3. 在计算机中的进制表现形式有三种,分别是__十进制___、 __八进制_____、 _十六进制_______。
  4. C 语言提供了 sizeof 运算符,该运算符主要用于__计算数据类型字节数______。
  1. 二进制和八进制相互转换
111 010 101 011 转换为八进制后结果为?
7253
76321 转换为二进制结果为?
‭00010010101000100001‬
  1. 二进制和十六进制相互转换
1111 1010 1101 1011 转换为十六进制后结果为?
fadb
a6b2f1 转换为二进制结果为?
1010 0110 1011 0010 1111 0001
  1. 请写出-8的原码、反码、补码
原码:1000 0000 0000 1000
反码:1000 0000 0000 1001
补码:1111 1111 1111 0110
  1. 计算如下程序结果
short a = 0xfffe;
printf("%d\n", a); //结果为多少?
-32766
unsigned short a = 0xfffe;
printf("%u\n", a); //结果为多少?
65534
short a = 0x7fff + 2;
printf("%d\n", a); //结果为多少?
1
unsigned short a = 0xffff + 5;
printf("%u\n", a); //结果为多少?
5
 
 
 

猜你喜欢

转载自www.cnblogs.com/bingger/p/10686981.html