当前位置:首页 » 《资源分享》 » 正文

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

7 人参与  2024年10月02日 15:20  分类 : 《资源分享》  评论

点击全文阅读


目录

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,补码为: 0x61char 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,并初始化为 48    mov         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,并初始化为 65    mov         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,并初始化为 90    mov         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;         // 补码为:0xffffsigned 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,并初始化为 -1    or          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,并初始化为 1    mov         eax,1      mov         word ptr [ebp-14h],ax ;eax的低16位 ax 的值传送到 ebp-14h 这个字单元中unsigned short int usi1 = 65535; //定义一个 unsigned short int 类型变量 usi1,并初始化为 65535    mov         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;         // 补码为: 0xffffffffsigned 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,并初始化为 -1    mov         dword ptr [ebp-8],0FFFFFFFFh    ;-1的补码是:0FFFFFFFFh,存在 ebp-8 为首地址的4个字节单元中signed int i2 = 1;// 定义一个 signed int 类型变量 i2,并初始化为 1    mov         dword ptr [ebp-14h],1           ;数据 1,存在 ebp-14h 为首地址的4个字节单元中unsigned int ui1 = 0xffffffff;//定义一个 unsigned int 类型变量 ui1,并初始化为 0xffffffff    mov         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;}


点击全文阅读


本文链接:http://zhangshiyu.com/post/167202.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1