基本类型:整型与字符型
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来显示指定具体;
以上是关于基本类型:整型与字符型的主要内容,如果未能解决你的问题,请参考以下文章