第二章
目录
#include <>是编译预处理命令
sizeof运算符
计算机的内存编址:
什么时候需要考虑字符变量是有符号的还是无符号的?
转义序列 \t 将会使得printf函数调到下一个横向制表符处停止
对于没有显式初始化的变量的初始值可以做怎样的假定?如果一个全局变量初始值为0它可否作为空指针或浮点0?
如何决定使用哪种数据类型?
什么是整数溢出?
标识符的长度是否有限制?
c语言没有提供标准的布尔类型,使用int可能更快,使用char可能更节省空间。
八进制由数字0开头。十六进制由数字0x开头
整型常量的表示方式
十进制小数,必须有小数点。
指数形式,用e来表示以10为底的指数,e的左边是有效数字--可以表示为小数或整数形式,e的右边是指数部分,必须是整数形式。
实型常量本身是双精度,后跟F是单精度,长双精度后跟L。
2-16进制转换
2-8进制转换。
10-R
为什么用二进制而不是我们熟悉的十进制来存储数据
为什么要在高级语言中引入数据类型的概念?
数据结构
为什么计算机内存中负数用补码来表示?
变量名的命名规则是
字符在内存中的存储
字符型分为有符号和无符号两种类型。
实数和整数在内存中的存储不同在哪?
计算机字长
基本数据类型的取值范围
#include <>是编译预处理命令 sizeof运算符
同种类型在不同平台所占字节数不尽相同,要想准确计算某种数据类型所占内存空间字节数,必须使用sizeof运算符。
计算机的内存编址:内存中的存储单元是一个线性地址表,按字节进行编址,对于存储单元的每个字节都用唯一的一个整数字来标识,这个数字称为它的地址。
什么时候需要考虑字符变量是有符号的还是无符号的? 如果在变量中只存储7位的字符,那么不需要考虑,因为符号位将为0。如果变量是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码。一个字节保存一个字符,因此字符常数其实质就是一个普通整数。#include <stdio.h>int main(){char ch;ch=getchar();ch+=32;//putchar(ch);printf("%c,%d",ch,ch) ;} 字符型分为有符号和无符号两种类型。无符号的ASCII码值在0到255.
有符号的在-128到127
普通char型,在使用时很少关心是有符号还是无符号。仅在用字符型变量存储一个单字节整数时,显式的声明是unsigned char还是signed char才有意义。
实数和整数在内存中的存储不同在哪?在计算机中,一般用定点表示法表示整数,浮点表示法表示实数。
定点表示法位数是确定的,因此定点数的值域是有限的。实数和整数在内存中的存储方式截然不同。
因为计算机处理的实数的数值可能很大或很小,所以不能直接用定点数来存储。因此,对于实数,无论是小数表示形式还是指数表示形式,在计算机内都采用浮点形式来存储。
二进制数的浮点表示:由符号位、阶码和尾数3部分组成。(实数的小数部分称为尾数(正负均可),决定实数的精度。实数的指数部分,称为阶码,决定实数的范围)
计算机字长处理的一串数码称为一个字,存储一个字所需字节的长度称为字长。(也就是能处理的数码长度越长越好,数码长度长了自然存储需要的字节就多了,所以字长越长越好)
在计算机中,一串数码是作为一个整体来处理或运算的,称为一个计算机字。
在存储器中,通常每个单元存储一个字。计算机存储一个字所需的字节的长度,称为字长。
字节长度固定是8位,字长是不固定的。字长代表计算机进行一次整数运算所能处理的二进制数据的位数。
字长越长,计算机运算精度越高,处理速度越快,性能越好。
基本数据类型的取值范围第二章