基本类型:整型与字符型

Posted shuqing-cxw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本类型:整型与字符型相关的知识,希望对你有一定的参考价值。

一、整型int

1.1 概述

整数类型用来表示不同的取值范围和正负值,含义和数学一样,整数是没有小数部分的值;

区分正负的类型,称为有符类型(signed),无正负的类型(只有正值),称为无符类型。 (unsigned);当声明某变量类型为无符号类型时,需要在类型声明前显示使用unsigned;

1.2 int类型

short int 类型:简写short,C规定占用的空间不能多于int

long int 类型: 简写 long ,占用的空间可能比int多;

long long int 类型: 简写 long long 占用的空间可能比long多;

C标准对基本数据类型只规定了允许的最小大小,这样占用空间的规定是为了适应不同的机器,int 默认被认为是计算机处理整数类型时最高效的类型;考虑某些硬件寄存器16位或者程序开发占用空间资源紧缺情况下,才考虑使用short,只有超出int类型表示的范围才考虑long及long long类型;

 1 //占用空间的大小
 2 #include <stdio.h>
 3 int main(void)
 4 {
 5      /* c99 provides a %zd specifier for sizes */
 6      printf("Type short     has a size of %zd bytes.
", sizeof(short));
 7      printf("Type int       has a size of %zd bytes.
", sizeof(int));
 8      printf("Type long      has a size of %zd bytes.
", sizeof(long));
 9      printf("Type long long has a size of %zd bytes.
",sizeof(long long));
10      return 0;
11 }
12 
13 //Ubuntu16.04 64bit print:
14 Type short     has a size of 2 bytes.
15 Type int       has a size of 4 bytes.
16 Type long      has a size of 8 bytes.
17 Type long long has a size of 8 bytes.

1.3 C语言中的转换说明打印不同int类型

以十进制显示输出使用%d,

以八进制显示输出使用%o或%#o(在数字前面显示进制代表符号)

十六进制显示输出使用%x或%X或%#X;

short类型使用前缀h:即%hd表示以十进制显示short类型的整数,%ho以八进制显示short类型的整数,%hx表示以十六进制显示short类型的整数;

1 #include <stdio.h>
2 int main(void)
3 {
4     short  i = 4;
5     printf("i = %hd 
", i);
6     printf("i = %#ho 
", i);
7     printf("i = %#hx 
", i);
8     return 0;
9 }

long 类型使用前缀l:即%ld表示以十进制显示short类型的整数,%lo以八进制显示short类型的整数,%lx表示以十六进制显示short类型的整数;

相应的,long long类型使用前缀ll;

注意:

不同的转换说明是指定计算机以什么样的格式进行存储和计算,使用不正确的转换可能产生错误;

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     short sn = 200;
 5     long ln = 65537;
 6     long long lln = 184467440737095516;
 7     printf(" sn = %hd and %d
", sn, sn);
 8     printf(" ln = %ld not is %hd
", ln, ln);
 9     printf("lln = %lld not is %ld 
", lln, lln);
10     return 0;
11 }
12 //print as:
13  sn = 200 and 200
14  ln = 65537 not is 1
15 lln = 1234567891708641112 not is -171798692

结论:

1.int类型被认为是计算机处理整数类型时最高效的类型,当给函数传递参数时,编译器把short类型自动转换为int类型

2.65537已超出short类型能表示的范围,使用%hd转换说明来显示一个已超出short类型的数据时,计算机则进行显示该较大整数截断成short类型的值后进行输出显示,由此可推出:超出类型所表示的范围时,数据将产生截断;

short类型最大范围:2^16 - 1 = 65535 即这16位上的数字全是1

可以推出65537用二进制表示时第17位和第1位上的数字为1其余为0;

用short类型显示输出long类型数据时,只显示后16位,故输出为1;

二、字符型char

2.1 字符型的本质

计算机使用数字编码来处理字符,即使用特定的整数表示特定的字符,故char本质上为整型;

美国最常用的编码是ASCII编码,标准范围0~127,只需要7位二进制即可表示;但也存在其他字符集超过了127,例如日本汉字kanji字符集,商用统一码Unicode等等;

C语言把1字节定义为char类型占用的位数;即1Byte=8bit,故无论16位还是32位系统都可以使用char类型

2.2 字符常量和初始化

用单引号括起来的单个字符被称为字符常量,当编译器发现’A’便会将其转换为相应的代码值(65);注意:单引号仅适用于字符、数字和标点符号;

2.3 非打印字符

非打印字符通常是一些表示行为的字符,如退格、换行、终端响铃或封鸣,C语言中使用转义序列来表示一些特殊的字符,同样的将转义序列赋值给字符变量时,必须使用单引号将转义序列括起来;

 1 转义序列         含义
 2 a              警报
 3               退格
 4 f              换页
 5 
              换行
 6 
              回车
 7 	              水平制表位
 8 v              垂直制表位
 9 \              反斜杠()
10 ’              单引号
11 ”              双引号
12 ?              问号

2.4 打印字符

1 #include <stdio.h>
2 int main(void)
3 {
4     char ch;
5     printf("Please enter a character…
");
6     scanf("%c",&ch)
7     printf("The code for %c is %d
", ch, ch);
8     return 0;
9 }

输入某字母后按下回车键,scanf()函数会读取输入的字符,&符号表示将输入的字符赋给变量ch,printf()函数将打印两次ch,一次打印字符类型(转换说明%c),一次打印整型(%d)

2.5 字符型是有符号还是无符号

取决于编译器,有的编译器将char实现为有符号类型,表示范围是-128~127,有些编译器则实现为无符号类型,即表示范围是0~255;但是C语言允许在char前面使用signed,unsigned来显示指定具体;

以上是关于基本类型:整型与字符型的主要内容,如果未能解决你的问题,请参考以下文章

实验九——基本数据类型存储及应用总结

实验九——基本数据类型存储及应用总结

第九次作业

delphi数据类型问题

第九次作业

实验九——基本数据类型存储及应用总结