当前位置: 首页 > news >正文

C语言:基本数据类型 char, short int, int

目录

1. char

1.1 使用 char 类型

1.2 存储形式

char (signed char) 有符号字符类型

unsigned char (无符号字符类型)        

1.3 char 类型的取值范围在  头文件中的定义

1.4 char 类型与汇编

2. short int

2.1 使用 short int 类型

2.2 存储形式

short int (signed short int) 有符号短整型 

unsigned short int (无符号短整型)        

2.3 short int 类型的取值范围在  头文件中的定义

2.4 short int 类型与汇编

3. int

3.1 使用 int 类型

3.2 存储形式

int (signed int) 有符号整型 

unsigned int (无符号整型)        

3.3 取值范围在  头文件中的定义

3.4 int 类型与汇编

4. 整数常量在 C 语言的书写格式


        C语言中,不同的数据类型用于声明变量,决定了变量在内存中占多少的内存空间。

1. char

        char 类型,主要用于存储字符的 ASCII码,占用内存大小为 1 个字节。char 类型又分为有符号 signed char 类型和 无符号 unsigned char 类型,如果不在 char 前面加上符号说明,默认是有符号 signed char 类型。

类型占用内存大小值范围存储形式内存示意图
char1 字节-128 ~ 127补码
signed char1 字节-128 ~ 127补码
unsigned char1 字节0 ~ 255二进制

1.1 使用 char 类型

	char c1 = 48;				// 定义一个 char 类型变量 c1,并初始化为 48char c2 = '1';				// 定义一个 char 类型变量 c2,并初始化为 '1'signed char c3 = 65;		// 定义一个 signed char 类型变量 c3,并初始化为 65signed char c4 = 'a';		// 定义一个 signed char 类型变量 c4,并初始化为 'a'unsigned char c5 = 90;		//	定义一个 unsigned char 类型变量 c5,并初始化为 90unsigned char c6 = 'z';		//	定义一个 unsigned char 类型变量 c6,并初始化为 'z'

1.2 存储形式

char (signed char) 有符号字符类型

 char (signed char) 类型,在内存中以二进制补码的形式存储,正数的补码 = 原码,负数的补码 = 反码 + 1。比如:

  • char c0 = ‘a’;         // ‘a’ 的ASCII码 97,补码为: 0x61
  • char c1 = -128;     // 补码为: 0x80
unsigned char (无符号字符类型)        

unsigned char 类型,在内存中直接用它的二进制形式存储,比如:

  • unsigned char c = 255,在内存中存储的值 c = 0xff。

1.3 char 类型的取值范围在 <limits.h> 头文件中的定义

#define CHAR_BIT      8                // char 占用 8 位
#define SCHAR_MIN   (-128)             // 有符号 char 最小值   
#define SCHAR_MAX     127              // 有符号 char 最大值
#define UCHAR_MAX     0xff             // 无符号 char 最大值#ifndef _CHAR_UNSIGNED                 // 如果没有定义 char 是无符号类型#define CHAR_MIN    SCHAR_MIN      // char 的最小值 = 有符号 char 的最小值  #define CHAR_MAX    SCHAR_MAX      // char 的最大值 = 有符号 char 的最大值  
#else                                  // 如果定义了 char 是无符号类型  #define CHAR_MIN    0              // char 的最小值 = 0  #define CHAR_MAX    UCHAR_MAX      // char 的最大值 = 无符号 char 的最大值
#endif
#include <stdio.h>
#include <limits.h>int main() {printf("char size = %d\n", sizeof(char));					// char size = 1printf("signed char size = %d\n", sizeof(signed char));		// signed char size = 1printf("SCHAR_MIN = %d\n", SCHAR_MIN);						// SCHAR_MIN = -128printf("SCHAR_MAX = %d\n", SCHAR_MAX);						// SCHAR_MAX = 127printf("unsigned char size = %d\n", sizeof(unsigned char));	// unsigned char size = 1printf("UCHAR_MAX = %u\n", UCHAR_MAX);						// UCHAR_MAX = 255return 0;
}

1.4 char 类型与汇编

	char c1 = 48;				// 定义一个 char 类型变量 c1,并初始化为 48mov         byte ptr [ebp-5],30h    ;ebp-5 这个字节单元存放 30h (48)char c2 = '1';				// 定义一个 char 类型变量 c2,并初始化为 '1'mov         byte ptr [ebp-11h],31h  ;ebp-11h 这个字节单元存放 31h (49)signed char c3 = 65;		// 定义一个 signed char 类型变量 c3,并初始化为 65mov         byte ptr [ebp-1Dh],41h  ;ebp-1Dh 这个字节单元存放 41h (65)signed char c4 = 'a';		// 定义一个 signed char 类型变量 c4,并初始化为 'a'mov         byte ptr [ebp-29h],61h  ;ebp-29h 这个字节单元存放 61h (97)unsigned char c5 = 90;		//	定义一个 unsigned char 类型变量 c5,并初始化为 90mov         byte ptr [ebp-35h],5Ah  ;ebp-35h 这个字节单元存放 5Ah (90)unsigned char c6 = 'z';		//	定义一个 unsigned char 类型变量 c6,并初始化为 'z'mov         byte ptr [ebp-41h],7Ah  ;ebp-41h 这个字节单元存放 7Ah (122)

2. short int

        short int 类型,占用内存大小为 2 个字节。short int 类型又分为有符号 signed short int 类型和 无符号 unsigned short int 类型,如果不在 short int 前面加上符号说明,默认是有符号 signed short int 类型。

类型占用内存大小值范围存储形式内存示意图
short int (signed short int)2 字节-(2^15) ~ (2^15)-1补码
unsigned int2 字节0 ~ (2^16)-1二进制

2.1 使用 short int 类型

	short int si1 = -1;				// 定义一个 short int 类型变量 si1,并初始化为 -1signed short int si2 = 1;		// 定义一个 signed short int 类型变量 si2,并初始化为 1unsigned short int usi1 = 65535; //	定义一个 unsigned short int 类型变量 usi1,并初始化为 65535

2.2 存储形式

short int (signed short int) 有符号短整型 

 short int (signed short int) 类型,在内存中以二进制补码的形式存储,正数的补码 = 原码,负数的补码 = 反码 + 1。比如:

  • short int si1 = -1;         // 补码为:0xffff
  • signed short int si2 = 1;    // 补码为:0x0001
unsigned short int (无符号短整型)        

unsigned short int类型,在内存中直接用它的二进制形式存储,比如:

  • unsigned short int usi1 = 65535,在内存中 c = 0xffff。

2.3 short int 类型的取值范围在 <limits.h> 头文件中的定义

#define SHRT_MIN    (-32768)
#define SHRT_MAX      32767
#define USHRT_MAX     0xffff    //65535 的十六进制表示
#include <stdio.h>
#include <limits.h>int main() {printf("short int size = %d\n", sizeof(short int));					// short int size = 2printf("signed short int size = %d\n", sizeof(signed short int));		// signed short int size = 2printf("SHRT_MIN = %d\n", SHRT_MIN);						// SHRT_MIN = -32768printf("SHRT_MAX = %d\n", SHRT_MAX);						// SHRT_MAX = 32767printf("unsigned short int size = %d\n", sizeof(unsigned short int));	// unsigned short int size = 2printf("USHRT_MAX = %u\n", USHRT_MAX);						// USHRT_MAX = 65535return 0;
}

2.4 short int 类型与汇编

	short int si1 = -1;				// 定义一个 short int 类型变量 si1,并初始化为 -1or          eax,0FFFFFFFFh      ;相当于 mov eax,0FFFFFFFFh, 但 or eax, 0FFFFFFFFh 更高效mov         word ptr [ebp-8],ax ;eax的低16位 ax 的值传送到 ebp-8 这个字单元中signed short int si2 = 1;		// 定义一个 signed short int 类型变量 si2,并初始化为 1mov         eax,1  mov         word ptr [ebp-14h],ax ;eax的低16位 ax 的值传送到 ebp-14h 这个字单元中unsigned short int usi1 = 65535; //	定义一个 unsigned short int 类型变量 usi1,并初始化为 65535mov         eax,0FFFFh  mov         word ptr [ebp-20h],ax  ;eax的低16位 ax 的值传送到 ebp-20h 这个字单元中

3. int

        int 类型,占用内存大小为 4 个字节。int 类型又分为有符号 signed int 类型和 无符号 unsigned int 类型,如果不在 int 前面加上符号说明,默认是有符号 signed int 类型。

类型占用内存大小值范围存储形式内存示意图
int (signed int)4 字节-(2^31) ~ (2^31)-1补码
unsigned int4 字节0 ~ (2^32)-1二进制

3.1 使用 int 类型

	int i1 = -1;				// 定义一个 int 类型变量 i1,并初始化为 -1signed int i2 = 1;		// 定义一个 signed int 类型变量 i2,并初始化为 1unsigned int ui1 = 0xffffffff;		//	定义一个 unsigned int 类型变量 ui1,并初始化为 0xffffffff

3.2 存储形式

int (signed int) 有符号整型 

 int (signed int) 类型,在内存中以二进制补码的形式存储,正数补码 = 原码,负数补码 = 反码 + 1。比如:

  • int i1 = -1;         // 补码为: 0xffffffff
  • signed int i2 = 1;    // 补码为: 0x00000001
unsigned int (无符号整型)        

unsigned int类型,在内存中直接用它的二进制形式存储,比如:

  • unsigned int ui1 = 0xffffffff,在内存中 c = 0xffffffff。

3.3 取值范围在 <limits.h> 头文件中的定义

#define INT_MIN     (-2147483647 - 1)
#define INT_MAX       2147483647
#define UINT_MAX      0xffffffff
#include <stdio.h>
#include <limits.h>int main() {printf("int size = %d\n", sizeof(int));					// int size = 4printf("signed int size = %d\n", sizeof(signed int));		// signed int size = 4printf("INT_MIN = %d\n", INT_MIN);						// INT_MIN = -2147483648printf("INT_MAX = %d\n", INT_MAX);						// INT_MAX = 2147483647printf("unsigned int size = %d\n", sizeof(unsigned int));	// unsigned int size = 4printf("UINT_MAX = %u\n", UINT_MAX);						// UINT_MAX = 4294967295return 0;
}

3.4 int 类型与汇编

	int i1 = -1;				// 定义一个 int 类型变量 i1,并初始化为 -1mov         dword ptr [ebp-8],0FFFFFFFFh    ;-1的补码是:0FFFFFFFFh,存在 ebp-8 为首地址的4个字节单元中signed int i2 = 1;		// 定义一个 signed int 类型变量 i2,并初始化为 1mov         dword ptr [ebp-14h],1           ;数据 1,存在 ebp-14h 为首地址的4个字节单元中unsigned int ui1 = 0xffffffff;		//	定义一个 unsigned int 类型变量 ui1,并初始化为 0xffffffffmov         dword ptr [ebp-20h],0FFFFFFFFh  ;数据 0FFFFFFFFh,存在 ebp-20h 为首地址的4个字节单元中

4. 整数常量在 C 语言的书写格式

        在计算机科学中,一般可以用二进制,八进制,十进制,十六进制来表示一个同一个数据,所以在 C 语言中,对于一个整型常量,也有4种书写格式。比如,一个 short int 类型数字 12

  •  默认为十进制书写方式:12 
  •  以数字0开头为八进制书写方式:014
  •  以0b开头为二进制书写方式:0b0000000000001100
  •  以0x开头为十六进制书写方式:0x000C
#include <stdio.h>int main() {// 以下为初始化为相同值:12char c1 = 12;char c2 = 014;char c3 = 0b00001100;char c4 = 0x0c;printf("%d, %d, %d, %d\n", c1, c2, c3, c4);// 以下为初始化为相同值:12short int si1 = 12;short int si2 = 014;short int si3 = 0b0000000000001100;short int si4 = 0x000c;printf("%d, %d, %d, %d\n", si1, si2, si3, si4);// 以下为初始化为相同值:12int i1 = 12;int i2 = 014;int i3 = 0b00001100;int i4 = 0x0c;printf("%d, %d, %d, %d\n", i1, i2, i3, i4);return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java后端开发-Mybatis连接数据库步骤
  • k3s中使用GPU资源
  • CommonJS与ESModule标准
  • uni-app - - - - - 使用uview-plus详细步骤
  • 深度学习之 OpenCV 图像边缘检测算法解析及代码演示
  • 【mysql】mysql目录结构和源码和mysql基础练习
  • 008、架构_MDS
  • DNS解析:深入解析与实战应用
  • 【C语言】通讯录的实现(详解)
  • 网络技术基础
  • 基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)
  • CTFhub通关攻略-SSRF篇【1-5关】
  • python网络爬虫(四)——实战练习
  • Qt22双缓冲机制
  • 网络模型及协议介绍
  • Android优雅地处理按钮重复点击
  • C学习-枚举(九)
  • ERLANG 网工修炼笔记 ---- UDP
  • Intervention/image 图片处理扩展包的安装和使用
  • JAVA并发编程--1.基础概念
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • PHP变量
  • Promise面试题2实现异步串行执行
  • select2 取值 遍历 设置默认值
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vuex 笔记整理
  • vue自定义指令实现v-tap插件
  • 动态魔术使用DBMS_SQL
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 简单数学运算程序(不定期更新)
  • 你不可错过的前端面试题(一)
  • 前端面试之闭包
  • 前端性能优化--懒加载和预加载
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 仓管云——企业云erp功能有哪些?
  • ​linux启动进程的方式
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • (42)STM32——LCD显示屏实验笔记
  • (C#)一个最简单的链表类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (function(){})()的分步解析
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (SERIES12)DM性能优化
  • (差分)胡桃爱原石
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net 4.0发布后不能正常显示图片问题
  • .net core 依赖注入的基本用发
  • .Net 执行Linux下多行shell命令方法
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?