C语言理解——基本数据类型


基本数据类型

C语言中基本数据类型分为三类:整型、字符型、浮点型。
在这里插入图片描述

每一类又可以分为有符号signed和无符号unsigned,从而所表示的取值范围不同。

提示:取值范围视不同编译器和系统环境有所不同。
基本规律是:
比如无符号的int,在N位系统中的取值范围是0-(2的N次方-1)

一、类型由来

内存运行的本质是由许许多多的位(bit)在1和0状态之间来回变化。

在高级语言出现之前,使用汇编语言操作内存,编码时,可能是这样的,这个用1个bit,那个用3个bit,那个用4个bit,数据多了,很难读,容易记乱。
在这里插入图片描述
随着存储技术的发展,内存容量越来越大,可以按字节为单位进行操作了。为了易读,给固定大小的内存块起个名称,通过名称来分配内存。给1个字节起名char,给2个字节起名short,给4个字节起名int,数据类型就这样诞生了,高级语言中就是这样做的。

在这里插入图片描述

二、定义变量

数据类型好比一个模具,从内存中卡出一个固定大小的内存块,不同类型卡出来的内存块也不同。

再后来发现,需要用多个大小一样的内存块,如果用char1,char2,int1 这样的方式去命名,非常不好记。为了易记,给各种内存块起个有意义的名称,变量就这样诞生了。
在这里插入图片描述

char a;
short b;
int age;

变量定义其实就是在内存空间中卡出固定大小的内存块。
在这里插入图片描述

有时候虽然知道基本数据类型在不同系统和编译器下,占用的字节数会有不同,但记不得具体了,怎么办呢?去翻书或查资料,也可以,但更好的办法是在当前软件环境下,直接编代码,运行查看类型的实际占用字节就可以了。总之,编程序需要灵活变通,就地取材,而不应该死记硬背。

#include <stdio.h>
int main()
{
    char c=0;
    short s=0;
    int i=0;
    printf("char size is %d\r\n",sizeof(char),sizeof(c));
    printf("short size is %d\r\n",sizeof(short),sizeof(s));
    printf("int size is %d\r\n",sizeof(int),sizeof(i));
    return 0;
}

运行结果:
char size is 1
short size is 2
int size is 4

用类型起的别名在内存中都是有起始地址编号及地址范围的,假如从地址编号0开始存放,以字节为最小单位。

默认顺序连续存放,假如是16位寻址方式。

char c; //起始地址编号是0,16位地址表示为0x0000
short s; //起始地址编号是1,范围是1-2,16位地址表示为0x0001-0x0002
int i; //起始地址编号是3,范围是3-6,16位地址表示为0x0003-0x0006

指定地址去存放(实际应用中指定地址很危险),假如是16位寻址方式。

int *p; p=(int *)0x07D3; //起始地址编号是2003,范围是2003-2006,16位地址表示为0x07D3-0x07D6

在实际编码中,通常将基本数据类型重新起新的名称,即起别名。别名中的数字是占的Bit位数,方便知道占用多少个字节。使用 typedef 给现有类型重新起个易懂易记又有意义的新名称。

typedef unsigned char uint8
typedef unsigned short uint16
typedef unsigned long uint32
typedef unsigned bool

typedef signed char int8
typedef signed short int16
typedef signed long int32

定义变量的时候如何选择数据类型?
根据变量要存储的值的范围和类型来选择,合适的就是最好的。
在这里插入图片描述

二、变量赋值

变量赋值应遵循的规则:

1、值的类型与变量类型一致,比如浮点值不能赋给字符类型变量
2、值不能超出变量所占的内存大小。

细节大多时候决定了成败。有时候写程序犯糊涂,定义无符号char类型的变量,进行自增去跟500比大小,超过500就执行任务,可发现一直不会出执行任务,因为变量增加到255后又归零了。

值大,类型选小,变量就放不下值。—— 虾米吃大鱼,根本吃不下。
在这里插入图片描述

值小,类型选大,变量的空间就浪费。—— 大鱼吃小鱼,小鱼吃虾米。
在这里插入图片描述

内容持续补充和改进中…

  • 32
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值