第二章-数据类型
-
#include <>是编译预处理命令
-
同种类型在不同平台所占字节数不尽相同,要想准确计算某种数据类型所占内存空间字节数,必须使用sizeof运算符。
-
计算机的内存编址:内存中的存储单元是一个线性地址表,按字节进行编址,对于存储单元的每个字节都用唯一的一个整数字来标识,这个数字称为它的地址。
-
什么时候需要考虑字符变量是有符号的还是无符号的?
- 如果在变量中只存储7位的字符,那么不需要考虑,因为符号位将为0.但是如果计划存储8位字符,而且希望变量是unsigned char类型。
- 如果变量是char类型,编译器可坑选择把它看做有符号的字符,如果只作为字符使用就可以,但是如果要转换为整数,那么转换的结果将是负数,因为变量的符号位为1。(所以类型为char,存储8位字符,最好不要后来再转换为整数)
-
转义序列 \t 将会使得printf函数调到下一个横向制表符处停止
#include <stdio.h> int main(){ printf("a\t b\n"); printf("cde\t fgh\n"); printf("ijkl\t mnop\n"); printf("qrstu\t vwxyz\n"); }
-
对于没有显示初始化的变量的初始值可以做怎样的假定?如果一个全局变量初始值为0它可否作为空指针或浮点0?
-
具有静态(static)生存期的未初始化变量(包括数组和结构)---即在函数外声明的变量和静态存储类型的变量可以确保初始值为零。
-
具有自动(automatic)生存期的变量(非静态存储类型的局部变量)如果没有显示初始化,则包含的是垃圾内容。
-
用malloc和realloc动态分配的内存也可能包含垃圾数据,必须正确初始化才行。
-
-
如何决定使用哪种数据类型?
-
如果可能用到很大的数值(大于32767或者小于-32767)就使用long型
-
如果空间很重要(有很大的数组或很多的结构)就使用short型
-
除此之外用int型
-
如果定义明确的移除特征很重要而负值无关,或者希望在操作二进制位和字节时避免符号扩展的问题。使用对应的unsigned型
-
尽管字符类型可以当成“小”整数使用,但这样做有时很麻烦,不值得。编译器需要生成额外的代码进行char和int之间的转换,导致目标代码量增大,而且不可预知的符号扩展也会带来一堆麻烦。
-
-
什么是整数溢出?超过整数的固定的最大值时,会导致溢出。编译器不能检查出溢出,所以导致存储了一个意想不到的错误值。一个经典的例子就是1996年阿丽亚娜火箭因浮点数转换成整数发生溢出而导致发射失败。
-
标识符的长度是否有限制?标识符的长度可以任意长,但是编译器只能记住前31个字符,因此如果两个名字的前31个字符都相同,那么编译器可能会无法区分它们。(总之,别担心太长,最好别太短,太短会重复)
-
c语言没有提供标准的布尔类型,使用int可能更快,使用char可能更节省空间。
-
八进制由数字0开头。十六进制由数字0x开头
-
整型常量的表示方式
-
int是有符号整数。无符号整数由常量值后跟U来表示,不能表示为小于0的数。
-
有符号整数和无符号整数的区别在于怎样解释整数的最高位。
-
无符号整数最高位被编译器解释为数据位。
-
有符号整数最高位解释为符号位,1时表示负数,0表示正数。
-
-
长整型后跟L。无符号长整型后跟LU。
-
-
十进制小数,必须有小数点。指数形式,用e来表示以10为底的指数,e的左边是有效数字--可以表示为小数或整数形式,e的右边是指数部分,必须是整数形式。
-
实型常量本身是双精度,后跟F是单精度,长双精度后跟L。
-
2-16进制转换:左向右四位一组,转十进制,拼起来就是十六进制。反之则是每一位16进制,展开为四位2进制。
-
2-8进制转换。同上,4位改三位。
-
10-R
-
整数部分:连续除R,倒取余数
-
小数部分:连续乘R,正取整数
-
-
为什么用二进制而不是我们熟悉的十进制来存储数据
-
二进制在电器元件中容易实现。0、1对应电路通、断。
-
二进制运算比十进制运算简单的多,有利于简化计算机内部结构提高运行速度。
-
-
为什么要在高级语言中引入数据类型的概念?
-
为了有效组织数据,规范数据使用,提高程序可读性,方便用户使用。
-
不用类型数据在内存中占用的存储单元大小不同、表示数据的取值范围不用、不同类型数据在内存中的存储形式不同,能参与的运算种类也不同。
-
-
数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合。适合的数据结构可以带来更高的运行或者存储效率。
-
为什么计算机内存中负数用补码来表示?
-
采用补码便于将减法运算也转化为加法运算来处理。
-
采用补码表示便于用统一的形式来表示0,否则会出现"-0" "+0"
-
-
变量名的命名规则是
-
不能出现汉字,符号里面只能出现下划线
-
数字不能做开头
-
不能用c的关键字(不用特意记,见多了就记得了)
-
长度不限,太长也没意思不是吗,分一分大小写就区分开了
-
-
字符在内存中以其对应的ASCII码的二进制形式存储。每个字符都有一个等价的数值型与其相对应,这个整型值就是该字符的ASCII码。一个字节保存一个字符,因此字符常数其实质就是一个普通整数。
-
字符型分为有符号和无符号两种类型。
-
无符号的ASCII码值在0到255.
-
有符号的在-128到127
-
普通char型,在使用时很少关心是有符号还是无符号。仅在用字符型变量存储一个单字节整数时,显式的声明是unsigned char还是signed char才有意义。
-
-
实数和整数在内存中的存储不同在哪?
-
在计算机中,一般用定点表示法表示整数,浮点表示法表示实数。
-
定点表示法位数是确定的,因此定点数的值域是有限的。实数和整数在内存中的存储方式截然不同。
-
因为计算机处理的实数的数值可能很大或很小,所以不能直接用定点数来存储。因此,对于实数,无论是小数表示形式还是指数表示形式,在计算机内都采用浮点形式来存储。
-
二进制数的浮点表示:由符号位、阶码和尾数3部分组成。(实数的小数部分称为尾数(正负均可),决定实数的精度。实数的指数部分,称为阶码,决定实数的范围)
-
-
计算机处理的一串数码称为一个字,存储一个字所需字节的长度称为字长。(也就是能处理的数码长度越长越好,数码长度长了自然存储需要的字节就多了,所以字长越长越好)
-
在计算机中,一串数码是作为一个整体来处理或运算的,称为一个计算机字。
-
在存储器中,通常每个单元存储一个字。计算机存储一个字所需的字节的长度,称为字长。
-
字节长度固定是8位,字长是不固定的。字长代表计算机进行一次整数运算所能处理的二进制数据的位数。
-
字长越长,计算机运算精度越高,处理速度越快,性能越好。
-
-
基本数据类型的取值范围
本文地址:https://blog.csdn.net/qq_42030496/article/details/107323163