C语言基础02_数据类型

数据宽度

数据宽度

我们都知道的,一个水杯是有容量的,当你接的水超过了可以容纳的量以后,就会流出来。计算机也是这样,如果存储的数据超过了所能接受的范围,就会选择抛弃一些数据来存储新的数据。这就是数据宽度(可以理解为一个容器)

常见的单位有如下几个:

  • Bit 只存一位二进制

  • 字节 Byte 可存储八位二进制0~FF

  • Word 可存储十六位二进制0~FFFF

  • 双字 Dword 可存储三十二位二进制0~FFFFFFFF

日常使用计算机时,最经常看到的就是字节。
在这里插入图片描述

数据溢出

在这里插入图片描述
一个整数型为4个字节,我们定义超出了四个字节,可以发现超出的部分A没有了

总结:如果数据超出存储范围,抛弃左边的数据

有无符号数

0代表的是正数。正数的计数规则和无符号数是一样的

在这里插入图片描述

这里的0或1开头,是转成二进制看的,十六进制1转成二进制是0001,所以是0开头。
如果是一个负数呢?
在这里插入图片描述

原码、反码、补码
正数的原码=反码=补码,不作讨论

我们以负数1000 1011为例

# 原码
绝对值本身,也就是 1000 1011 

# 反码 
符号位不变,其余位置取反,也就是 1111 0100 

# 补码 
符号位不变,其余位置取反,取反完成后+1,也就是 1111 0101 

负数在内存中的存储

在这里插入图片描述如上图所示,-1在内存中为FF,那么它是以什么形式存储的呢?

原码:-1转换为二进制为1000 0001,16进制为81

反码:原码除去符号位1,其余位取反,1111 1110,16进制为FE

补码:原码除去符号位1,其余位取反,再+1,1111 1111,16进制为FF

结论:负数在内存中以补码形式存储。

数据类型

进制

0x代表十六进制
0b代表二进制
0代表八进制

整数型

范围

范围:-2^31-2^31-1 	-2147483648-2147483647

声明

int 32short int 16位	输出使用%hd、%ho、%hx,下面同理
long int 32位	输出使用%ld
long long int 64位 	输出使用%lld

输出十进制、八进制、十六进制

int num=1;			
printf("%d %o %x", num, num, num);	//%d
short int num=1;	
printf("%hd %ho %hx", num, num, num);	//%hd
long int num=1;		
printf("%ld %lo %lx", num, num, num);	//%ld
long long num=1;	
printf("%lld %llo %llx", num, num, num);	//%lld

无符号

unsigned 无符号	
unsigned int 就是只有正数	输出使用%u

字符型

//char
理论上为8字节,ascii码范围为0-127
后来有了unicode,16位、32

声明,注意不能使用双引号

//这里不能用双引号,因为双引号定义的是字符串
char name='A';

输出

//输出	%c
printf("%c", name);

浮点数

float 单精度浮点型 32double 双精度浮点型 64

定义使用小数点或科学技术法

//定义
float num = 1.1;
double num2 = 12E-5;

输出使用%f

//输出 %f
prinf("%f %f",num, num2)

其他数据类型

HANDLE 句柄(智能指针)

C++HANDLE的理解

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。

Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针,当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。

简介

句柄(handle)是C++程序设计中经常提及的一个术语。它并不是一种具体的、固定不变的数据类型或实体,而是代表了程序设计中的一个广义的概念。句柄一般是指获取另一个对象的方法——一个广义的指针,它的具体形式可能是一个整数、一个对象或就是一个真实的指针,而它的目的就是建立起与被访问对象之间的唯一的联系。

在C++中,要访问一个对象,通常可以建立一个指向对象的指针。但是在很多具体的应用中,直接用指针代表对象并不是一个好的解决方案
对象.

句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控制、位图、GDI对象、资源、文件等

数据类型.

从数据类型上来看,它只是一个16位的无符号整数。应用程序总是通过调用Windows API获得一个句柄,之后其他 Windows函数就可以使用该句柄,以引用和操作相应的内核对象。句柄可以像指针那样置空,那样句柄就没有任何意义,不代表任何内核对象

使用.

句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。

LPVOID(没有类型的指针)

LPVOID是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候在转换回来

WINAPI

其实WINAPI是C语言中的一种调用方式,WINAPI是一个宏,所代表的符号是__stdcall, 函数名前加上这个符号表示这个函数的调用约定是标准调用约定,windows API函数采用这种调用约定。

什么时候使用WINAPI宏定义?
1.在程序中需要调用WindowsAPI的方法时,有些方法的接口声明和定义会用到WINAPI宏。
2.在编写Windows应用程序时(如C编写windows窗口程序),其中调用的函数声明和定义时需要加上WINAPI宏。
3.在进行C++thread多线程编程时线程调用的程序必须以下列形式声明:
DWORD WINAPI 函数名 (LPVOID lpParam) ,格式不正确将无法调用成功。

C++学习笔记————WINAPI宏定义

DWORD

32位无符号整数,DWORD 一般用于返回值不会有负数的情况。

使用
① DWORD在Windows下经常用来保存地址(或者存放指针)。
② 使用时应该添加如下文件包含#include<windows.h> 。

typedef

起别名

typedef unsigned char BYTE;
 
typedef unsigned short WORD;
 
typedef unsigned long DWORD;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值