C语言复习第一天(上篇)

基本数据类型和变量

1、什么是数据类型?
数据类型可以理解为固定内存大小的别名。对不同定义的变量的分配内存,并以对应的内存存储形式存放。
基本数据类型

2、什么是变量?
变量可以理解为实际存储空间的别名
实际程序通过变量来申请并命名存储空间。
使用变量可以使用存储空间
在这里插入图片描述
3、数据类型和变量:
数据类型确定申请内存空间的大小以及数据在内存中存储形式,而变量 的作用即是确定具体某块可用的内存

char 类型

	char类型为字符型变量,按照ascill码表将字符以二进制的形式存放在内存中,大小为一个字节(8位)。
#include <stdio.h>

int main()
{
    char a='a';
    printf("sizeof(char)=%d \n",sizeof(char));
    printf("sizeof(a)=%d\n",sizeof(a));
    printf(" a=%d\n",a);
    printf(" a=%c\n",a);
}

运行的结果为:
在这里插入图片描述

short 类型

short类型短整型变量,内存大小为两字节。
#include <stdio.h>
int main()
{
    short a=123;
    printf("sizeof(short)=%d \n",sizeof(short));
    printf("sizeof(a)=%d\n",sizeof(a));
    printf(" a=%d\n",a);
}

在这里插入图片描述

int 类型

int类型短整型变量,内存大小为四字节。
#include <stdio.h>
int main()
{
    int a=123;
    printf("sizeof(int)=%d \n",sizeof(int));
    printf("sizeof(a)=%d\n",sizeof(a));
    printf(" a=%d\n",a);
}

在这里插入图片描述

float 类型

float类型数据在内存占四个字节,但是其在内存中存储数据的方式与整形不同,具体方式后面章节会详细介绍。
#include <stdio.h>
int main()
{
    float a=12.3;
    printf("sizeof(int)=%d \n",sizeof(int));
    printf("sizeof(a)=%d\n",sizeof(a));
    printf(" a=%f\n",a);
}

在这里插入图片描述

定义自己的数据类型(typedef,struct)

通过 typedef 可以为已有的数据结果名一个我们习惯的别名,同时struct可以定义我们自己的数据类型。

#include <stdio.h>
typedef int INT32;
typedef short INT16;
typedef struct ts
{
   INT32 a;
   INT16 b;
   short c;
}my_ts;
int main()
{
    my_ts m_ts;
    printf("sizeof(my_ts)=%d \n",sizeof(my_ts));
    printf("sizeof(m_ts)=%d\n",sizeof(m_ts));
}

运行的结果:4+2+2=8
在这里插入图片描述

有符号和无符号

计算机中的符号位

	数据类型的最高位用于表示数据的符号
	最高位1 表示正数
	最高位0 表示负数
	下面编程举例:
	使用0x80,0x8000,0x80000000与变量相与,转化二进制即最高位为1,其余全为0,1与任何数相与还是原数,即可测试出最高位。
#include <stdio.h>
int main()
{
    char a=100;
    short s=-20;
    int b=-100;

    printf("%d\n",((a&0x80)!=0));
    printf("%d\n",((s&0x8000)!=0));
    printf("%d\n",((a&0x80000000)!=0));
}

在这里插入图片描述

有符号数的表示方法

	在计算机的内部用补码表示有符号数。
	正数的补码还是正数。
	负数的补码为绝对值的二进制取反+1
	8位 正数5的补码为  00000101
	8位 负数-5的补码为 11111011
	16位   正数20的补码  000 0000 0011 0100‬
	16位   负数-20的补码1111 1111 1110 1100
	大家可以用计算器验证:

在这里插入图片描述

无符号数的表示方法

1、计算机中用原码表示无符号数
	无符号数默认为正数
	无符号数没有符号位。
2、对于长度固定的无符号数
	最大数+1=最小数
	最小数-1=最大数

signed和unsigned

	c语言中用signed 和 unsigned来定义有符号数 和无符号数
	unsigned 用来定义无符号类型,不写默认为有符号。
	tips:C语言中只有*整形*和*char类型*才有无符号类型
			**小数类型**不能定义无符号。

当无符号数遇到有符号数

代码举例:无符号数和有符号相遇,会被同化为无符号数。
代码分析:因为无符号数和有符号数相加会被隐式规则默认同化为无符号。所以原先-5在计算机存放的值为1111 1111 1111 1011‬,被同化为有符号数则为1111 1111 1111 1011‬=一个很大数,所以大于0.

#include <stdio.h>
int main()
{
    unsigned int i = 5;
    int j = -10; 
    if( (i + j) > 0 )
    {
        printf("i + j > 0\n");
    }
    else
    {
        printf("i + j <= 0\n");
    } 
   return 0;
}

在这里插入图片描述

错误使用unsigned

	因为无符号存储的特性而错误使用:
		最大值+1=最小值
		最小值-1=最大值
#include <stdio.h>

int main()
{
    unsigned int i = 0;
    for(i=9; i>=0; i--)
    {
        printf("i = %u\n", i);
    }
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值