当前位置:网站首页>C语言数据 3(2)
C语言数据 3(2)
2022-07-28 18:11:00 【美好生活体验官】
学习笔记:
6.整型数据
整型数据包括整型变量和整型常量两种
整型数据的存储
C语言提供了多种整数类型,分别用来表示不同范围的整数。整型数据的大小一般与系统的字长有关,其存储一般采用补码的形式。
1.字长的概念
字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制位数,字长总是8的整数倍,通常计算机的字长为16位(早期)、32位和64位。
32位CPU就是在同一时间内处理字长为32位的二进制数据。二进制的每一个0或1是组成二进制的最小单位,称为一个比特(bit)。在其他指标相同时,字长越大计算机处理数据的速度就越快。
一台16位字长的计算机,可以直接处理216(65536)之内的数字,对于超过65536的数字,则需要分解的方法来处理。32位计算机比16位机优越的原因就在于,它在一次操作中能处理的数字大,其能直接处理的数字高达40亿(232)。能处理的数字越大,则操作的次数就越少,从而系统的效率也就越高。
现在CPU大多是64位的,但并不等于其是按64位字长运行的,这需要操作系统的支持。如果仍然是32位的操作系统,那么仍将以32位字长运行,没能展示它的字长的优越性。因此,64位的CPU和64位的操作系统才能使CPU按照64位字长运行。
不同CPU体系结构及其字长,如表。其中,i386、ia64和x86_64是目前应用最广的CPU构架。
2.整型数据的存储空间
C语言中,根据计算机的字长不同,为int整型类型分配的存储空间也不一样。例如,
在32位计算机中,因字长为32位,int整型类型也将用32位二进制数表示(即占用4个字节),而在早期的16位计算机上,因字长为16位,int整型类型将用16位二进制数表示(2个字节)。其他数据类型的存储空间,例如float、double等,也与计算机的字长有关。
如果读者不知道一个系统的字长及每个数据类型所占的存储空间,可以使用sizeof运算符来计算。
sizeof运算符的作用就是用来计算指数据类型或变量占用的存储空间大小,以字节为单位。
32位计算机中整型数据取值范围:
3.整型数据的存储形式
计算机中,整型数据是以二进制形式存储的,且一般采用补码的形式表示,这样可以提高计算机加减运算的速度。补码的规则如下:
·正数的补码为其自身。
·负数的补码,除符号位外逐位取反(即0变1,1变0),最后再加1。
补码详细见:C语言进制及运算详解 2
7.整型常量
在C语言中,整型常量及整型常数可以表示十进制、八进制、十六进制的整数值。C程序中,编译器将根据数字前缀区分各种进制。
1.整型常量的十进制表示
在C语言中十进制整型常量是以非0开始的数来表示,直接由数字0~9组成。
例如,以下各数是合法的十进制整型常数。
220、-560、45900等
而以下各数均不是合法的十进制整型常数。
0123(不能以0开始,否则编译器将其认为是八进制数)
0x567(不能以0x开始,否则编译器将其认为是十六进制数)
5F(数据中含有0~9之外的数)
2.整型常量的八进制表示
在C语言中八进制数是用以0开始的数来表示,直接由数字0~7组成。其中,起始0是必需的引导符。
例如,以下各数是合法的八进制整型常数。
0735,相当于十进制的477
0101,相当于十进制的65
010000,相当于十进制的4096
07777,相当于十进制为4095
而以下各数均不是合法的八进制整型常数。
213(无前缀0,编译器将其保存为十进制数的值)
0918(数据中含有0~7之外的数)
3.整型常量的十六进制表示
在C语言中十六进制数是以0X或0x开始的数来表示,直接由0~9、A~F或a~f组成。其中引导符0是必须有的,X即字母,既可用大写也可用小写。
例如,以下各数是合法的十六进制整型常数。
0XFF,相当于十进制的255
0x100000,相当于十进制的65536
0x3a4f,相当于十进制的14927
而以下各数不是合法的十六进制整型常量:
FFFF(无前缀0X或0x)
0x5HB(数据中含有0~9、A~F或a~f之外的符号)
4.整型常量的后缀
通常,C编译器将智能识别整数常量的类型。例如,在程序中使用数字1200,编译器将该数字以int类型存储到内存中。
如果程序中有数字26828 820818,这时使用int类型(4个字节)将不能完整地保存该数值,编译器将自动选择使用unsigned long类型。如果仍然不能完整地表示该数,编译器将会选择使用long long类型保存该数,甚至使用unsigned long long类型。 在一个小的整数后面添加一个字母l(小写的L)或L,则该数将被看作一个long类型的常数。在16位的计算机中,编译器会将128作为2字节的int类型存储,而128L则会告诉编译器将该数保存为4字节的long类型。
若需要将小的整数按long long类型存储,可在整数常量的后面添加后缀ll(或LL)。
若要将整数常量作为无符号数据存储,可在整数常量的后面添加后缀u(或U)。后缀U可以和L或LL一起使用。
例如,10UL表示按long类型存储的无符号数10(占用4个字节存储空间),而10ULL表示按long long类型存储的无符号数10(占用8个字节存储空间)。
整型数据的输入/出
在C程序中,可以使用scanf()函数向程序输入数据。对于int整型数据,一般采用%d格式化控制符来实现。
1.输入/出不同类型的整型数据
在scanf()函数中,使用%d控制符可输入带符号的十进制整数。除此之外,还可以使用以下控制符输入不同类型的整数:
· %ld:输入signed long数值;
· %hd:输入signed short数值;
·%lld:输入signed long long数值;
·%u:输入unsigned int数值;
· %lu:输入unsigned long数值;
·%llu:输入unsigned long long数值。
2.输入/出不同进制的整型数据
在C语言中,可按十进制、十六进制和八进制三种方式书写整型数据。使用scanf()函数也允许按这三种进制输入整数。在默认的情况下是输入十进制数,可在scanf()函数中使用控制符来控制输入不同进制的数据:
· %x:输入十六进制整数;
· %o:输入八进制整数。
8.字符型数据
- 字符型变量只能存放一个字符。分为有符号和无符号字符变量。
- 字符型常量是指用一对单括号括起来的一个字符。字符型常量引号中的字符不能是单引号‘和反斜杠\。如果需要,用转义字符。
- 字符型存储:ANSI C标准规定,一个char的长度一定是8位。
例如,字符型变量ch为’a’,其ASCII码为97,对应的二进制为“01100001”
转义字符:
9.浮点型数据
用于表示包含小数点的数据类型,也称实数类型。分为3类型,float(单精度)类型、double(双精度)类型、long double(长双精度)类型。
存储时把数据分为3部分,
符号位用来表示正负数,小数部分表示实数的有效位,指数部分表示10的几次幂。
例如:以5.1为例:5的二进制为101。 0.1的二进制为0.0001100110011001100110011…(无限循环)。 所以5.1 = 101.000110011001100110011001100110011… 5.1= 1.010001100110011001100110011001100110011…* 2^2 因为第一位总是为1,如果是0,就移动小数点直到是非0的,所以第一位的1丢弃。首先看小数位,得到 01000110011001100110011001100110011… 取23位有效数据,得到01000110011001100110011 接着,再看指数部分,指数是2,根据规定,指数统一加127再转换为无符号8位2进制数,2+127=129(10000001)。 在存储的时候,指数部分存储在基数之前,这样就有31位了,因为5.1是正的,所以符号为0时,存储在指数之前。
这样就得到:
01000000101000110011001100110011浮点型常量通常称为实型常量,其值可以表示为十进制。
浮点型常量的值由整数部分、尾数部分和指数部分组成。一般情况下,在不加说明的情况下,浮点型常量为正值。如果表示负值,需要在常量前使用负号。例如:28.57、-57.63、-7.2e-16、8.265。 在C语言中,对于绝对值小于1的浮点数,其小数点前面的0可以省略。例如下面均为合法的浮点型常量: 0.27可写为.27、-0.031E-4可写为-.031E-4。
注意:
在编译环境中采用默认格式输出浮点数时,最多只保留小数点后6位,不够的后面补0。 在浮点型常量中不得出现任何空白符号。 字母E或e之前必须有数字,表示形式为“数字e±数字”。 浮点型常量中E或e后面指数必须为整数,例如“e2.1”、“e 3”等都是不合法的指数形式。 在C语言中,所有浮点常数都被默认为double型。使用double进行存储的目的是,因为该类型的有效位数多一些,能保证计算的精度。但是,因为double要占用8个字节,比float多占一倍的空间,将影响程序的执行。但这影响是有限的,可以忽略。
如果需要用float类型来存储浮点型数据,则可以通过后缀f(或F)强制将实数常量按float类型存储。
边栏推荐
- Communication learning static routing across regional networks
- XOR operation and its usage
- Deploy LNMP automatically with saltstack
- [C language] string reverse order implementation (recursion and iteration)
- 2022年下半年系统集成项目管理工程师认证8月20日开班
- C language - data storage
- [C language] print pattern summary
- [C language] step jumping problem [recursion]
- Edge detection and connection of image segmentation realized by MATLAB
- 熊市下PLATO如何通过Elephant Swap,获得溢价收益?
猜你喜欢
[NPP installation plug-in]
Edge detection and connection of image segmentation realized by MATLAB
Store and guarantee rancher data based on Minio objects
How can Plato obtain premium income through elephant swap in a bear market?
Idea properties file display \u solution of not displaying Chinese
Common APIs in string
Design of air combat game based on qtgui image interface
Overcome the "fear of looking at teeth", and we use technology to change the industry
2022年下半年系统集成项目管理工程师认证8月20日开班
Circular linked list OJ question
随机推荐
河北:稳粮扩豆助力粮油生产提质增效
中国能否在元宇宙的未来发展中取得突破,占领高地?
C language operators and input and output
Usage of const and assert
2022年下半年系统集成项目管理工程师认证8月20日开班
Deploy ZABBIX automatically with saltstack
Zfoo adds routes similar to mydog
Machine learning -- model evaluation, selection and verification
[C language] initial C language reflection and summary
mmo及时战斗游戏中的场景线程分配
Tencent cloud deployment lamp_ Experience of building a station
Digital filter design matlab
How to automatically store email attachments in SharePoint
Use of strtok and strError
The cloud native programming challenge is hot, with 510000 bonus waiting for you to challenge!
1. C language variable type, global variable, local variable
爬取IP
MySQL命令语句(个人总结)
Source code analysis of scripy spider
Labelme (I)