读书笔记-C语言-数据类型

1、标识符

什么事标识符呢?变量的名字就是标识符。不仅限于变量名,程序中各种元素的名字,都属于标识符。例如符号常量名、函数名、数组名、类型名等。关键字也叫保留字。属于关键字的词已被系统“注册”了,特殊用途,我们在为程序中的各种元素命名时是坚决不能使用这些关键字的。

C语言中的系统函数名如求正弦的函数名sin、求算术平方根的函数名sqrt、用于输出的函数名printf等,不属于关键字,称为预定义标识符。可以用预定义标识符为变量命名,语法上是可以的,但是我们应尽量不要那样做。如果为一个变量命名为sin,显然是在制造混乱:sin究竟是指变量还是指系统函数呢?

除关键字、预定义标识符的这些词之外,我们为程序元素命名的其他的名字如a、b等,成用户标识符。

用户标识符的规则:只能由英文字母、数字、下划线三种符号组成。字母区分大小写。首字母不能为数字,可以为英文字母或下划线。不能使用关键字。

2、常量

直接写在程序里的数据值,就是常量。例如a=10;10就是常量。b=2+3;2、3也是常量。而a、b不是常量是变量。

常量的概念不止限于数字型,直接写在程序中的文字型的数据值也是常量,例如‘b’、“Hello”等。文字型常量要用引号硬起来,有两种类型,分别称为字符常量和字符串常量。

还有一种常量是用符号代替的,称为符号常量。符号常量需用#define命令定义:#define  PI  3.14;表示定义PI是3.14的代替符号,PI是3.14的代号,PI就是3.14(不是变量PI的值是3.14)。3.14是常量,故PI也是常量。

在程序运行过程中这些值不会变化,故称为常量。

3、变量

在程序中,变量实际代表的是计算机内存中的一块存储空间,存储空间的名称就是变量名,其中存储的内容就是变量的值。变量必须先定义然后才能使用。举例:int a;是定义变量,它表示让计算机先准备好变量a这个盒子,实际是让计算机在内存中分配和划定变量a的存储空间。在程序中,我们可以随时将新值保存在变量中。当新值保存在变量中时,变量原有的值同时被覆盖不复存在;因为一个变量在某一时刻只能保存一个值。

注意:定义变量后在为它赋值前,变量的值不是“空白”,而是随机数。

在定义时为变量赋初值也称对变量的初始化。举例:int  sum=0;int price=9,height=10;int  size=num+4;size的值为4,可用表达式为变量赋初值。

在定义中不允许连续赋初值。举例:int  x=y=z=5;错误。而只能写为:int x=5,y=5,z=5;

4、数据类型

整型数据

数值型数据分整数和实数,整数是不带有小数点的,而实数必须带有小数点。

(1)整型常量的表示

整型常量就是直接写在程序里的整数,如语句a=10;10就是整型常量。这种直接写出的整数都是十进制的,在c语言中还允许将整数写为八进制或十六进制。

写为十进制:直接写,与生活中的写法一致。

写为八进制:在整数前加0。例如a=012;注意:生活中在整数前加0是没有任何作用的,但在c语言中,整数前加0与不加0完全不同,加了0就是八进制。例子中012是八进制的12。

写为十六进制:在整数前加0x或0X。a=0xA。x、A大小写均可,如a=0Xa;a=0XA;

在C语言中不允许将数据写为二进制。

整型数据如何在计算机中存储:计算机的内存只能存储0或1,整数要被转换为二进制存储,占2个或4个字节。

注意:整数在计算机中存储,除要转换为二进制外,还要转换为补码。将整数字节转换为二进制的形式称为原码。正数的补码和原码相同;负数的补码为该数绝对值的二进制形式按位取反。(即1变为0,0变为1)后在加1.对于有符号数,二进制的最高位(最左边一位)为符号位;负数为1正数为0.采用补码可以将减法运算变作加法实现。

《整数补码

编辑

求给定数值的补码分以下两种情况:

正数

正整数的补码是其二进制表示,与原码相同[2]

【例1】+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)

负数

求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1[2]

同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。

【例2】求-5的补码。

-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)

所以-5的补码是11111011。

【例3】数0的补码表示是唯一的。

[+0]补=[+0]反=[+0]原=00000000

[ -0]补=11111111+1=00000000

转化为原码

已知一个数的补码,求原码的操作其实就是对该补码再求补码:

⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。

⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

【例4】已知一个补码为11111001,则原码是10000111(-7)。

因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。

其余七位1111001取反后为0000110;

再加1,所以是10000111。》

整型变量的类型:int a;a=2.8;a将被赋值为2(无四舍五入)

基本型整型变量:整型变量是专门用于保存整数的变量,且只能保存整数,不能保存实数。由int 定义的变量称为基本型的整型变量。它的空间的大小由编译系统决定。在vc++6.0中,占4字节;在其他某些编译系统中,占2字节。整型变量的空间大小是预先由编译系统规定的,与变量值无关。int  a;无论a的值为1还是20000,在vc++6.0系统中均占4字节。

其他类型的整型变量:无论向谁询问,只要明确了是什么规格的包,则必然能得到确定的回答,例如问“旅行包多大?”或“女式的包多大?”。在汉语中,“旅行”“女士的”是“包”的修饰语。在c语言中,也可为int添加修饰语,已明确指出整型变量的规格。int的修饰语有以下4个:short:表示变量为短整型,即确定占2个字节的整型变量。long:表示变量为长整型,即确定占4个字节的整型变量。signed:表示变量为有符号型,即可以保存负数的整型变量。unsigned:表示变量为无符号型,即可以保存正数和0,但不能保存负数的整型变量。

以上修饰语在定义整型变量时可选用0~多个,已定义不同规格的整型变量;但short和long不能同时选用,signed和unsigned不能同时选用。当既不用short也不用long时,视为基本型,其空间大小由编译系统决定;当既不用singed也不用unsigned时,视同signed,即有符号型。举例:signed short int a;如果使用了修饰词,int可以省略signed short a;

占2字节的有符号短整型变量取值范围为-32768~32767,无符号的就为0~65535,能保存的最大值比相应有符号数扩大一倍;占4字节的整型变量也是如此(范围最大分别是~+21亿、~+42亿)。这是因为原来表示负数的空间在无符号变量中也用于表示正数了。

实型数据

实型也称浮点型,就是带有小数点的数值型数据。

(1)实型常量

实型常量也称实数或浮点数,在c语言中只能写为十进制,不能写为其他进制。但十进制的实型常量又可写为两种形式:小数形式、指数形式。

小数形式:在程序中小数额写法与生活中的写法类似,例如:3.14159  0.158   0.0   -18.0  12.    .36 整数部分为0时0可以省略,如0.36可写为.36。小数部分末尾的0也可省略,如12.0可写作12.。

注意:小数点是不能省略的,对于无小数位的实数也必须有小数点。如实数12.0写作12是不行的,因为12是整数就不是实数了。

指数形式:

以科学计数法表示的实数如2.1*10^5,在C语言中用e(或E)表示“*10”,对于2.1*10^5,在程序中应写作2.1E5或2.1e5。举例:-2.8e-2表示-2.8*10^-2。

注意:e或E前后的内容都不能省略。对E(或e)前的小数范围没有要求,但规定E(或e)后必须是整数不能是小数。aen(或aEn)是一个整体,表示一个数,相当于英语中的一个单词,中间是不能随便加空格的。

(2)实型变量

如何定义实型变量?实型变量有两种规格:一种为单精度实型,一种为双精度实型。双精度型的能表示的数值范围相对更、精度更高。

单精度型:单精度型的变量用关键字float定义,这种变量占4个字节,有效数字6位(有效数字是指从第一个不是0的数值起的数据位数,不一定是6位小数),表示范围+(-)10^38。举例:float f=0.001234567;float f=0.00123456789;/*有效数字过多将被阶段,f实际值为0.001234568*/

双精度:双精度的变量用关键字double定义,这种变量占8个字节,有效数字15位,表示范围+(-)10^308。

实型数据也是被转换为二进制后存储,但首先要转换为“小数*2^指数”的形式,然后将小数部分和指数部分分别转换为二进制,在分别存储小数部分和指数部分。这与整型数据的存储方式截然不同。

类型的转换

在C语言中对数据类型的规定是很严格的,整型变量只能保存整数不能保存实数;实型变量只能保存实数,不能保存整数。如果硬要将数据存入不同类型的变量,计算机会以变量的类型为准,自动将数据转换为与变量一致的类型,然后再存入变量。举例:int a;a=2.8;则变量a中只会保存整数2。double y;y=3;则变量y中保存的数据是双精度实数3.0而不是整数3.

这种转换是由计算机自动进行的,称为制动类型转换。

为了与变量的类型一致,也可以为常量规定类型。常量是什么类型呢?写在程序中的整型常量都默认是有符号基本型即int型的,实型常量默认是双精度型即double型的。若要改变常量的类型,可在常量后加字母后缀。字母后缀可以有:L或l。在整数后加L或l表示常量为长整型的,如0l、-125l。若不写l表示常量为基本型。在实数后加l或L表示常量为长双精度型的(long double),如1.234567L。

如果需要表示常量是短整型的,无相应字母后缀,可用强制类型转换如(short)5;

只能写在整数常量之后表示常量为无符号型的,无符号即非负,不能为负数:如0U(u)、6U(u)。不写U或u则表示常量为有符号型的,可以为负数。

表示常量为单精度实型(float型),如8.224f为float型而不是double型的,125f也为float型而不是int型的。即有后缀f时,可不加小数点,也表示实数(单精度实数)。

在整数后可同时加L或U,如0LU、6LU等,表示整数是无符号长整型的。

字符型数据

(1)字符常量:单个字符

每个字符常量占1个字节(8个二进制位)。

字符常量不仅限于字母字符如‘a‘,数字字符’4‘,符号字符’、‘,’!‘等。空格字符' '。单引号必须是英文单引号,''连续单引号是错误的。

一个中文汉字占2个字节,不能作为一个字符常量。一个汉字一般要存储为unsigned short int型的数据。

人们把能录入计算机的每个字符也都安排一个整数的数值编号,这种字符的编号称为ascII码。ascII码是整数,可悲字节转换为二进制。要存储一个字符,只要存储这个字符ascII码的二进制即可。例如:字符'A'的ascII码为65,要存储字符'A'就存储65的二进制;

每类字符ascII码的大小顺序:控制字符(除127外)<空格<数字字符<大写字母<小写字母。

由于字符占1个字节(8比特),因此ascII码范围是0~255(2^8-1)。

ascII码在128~255之间的字符为扩展字符,可作为非英语国家本国语言字符的代码,中文半个汉字的ascII码就在128~255之间(1个汉字占2个字节)。


注意:字符’a‘的ascII码是97,在内存中存为97的二进制,那么整数97也存为97的二进制。如果在计算机中发现存储了一个97的二进制,是无法区分是字符'a',还是整数97的,于是在计算机中就给出了这样一种规则——整数和字符是混用的。例如:字符型量可与整型量做加减乘除的运算,甚至可以和整数比较大小。整数和字符的混用并不难,只要把字符型量替换为对应的ascII码即可。举例:

'C'+1的值为'D',或值为68。

'D'-'A'的值为3,看做68-65。

'7'+'1'的值为55+49=104,或值为字符'h',不是'8'。

'1'<'A'看做49<65,或按照数字字符的ascII码小于大写字母的规则判断。

整数和字符占用的字节数是不同的。一个整数一般占4个字节(在vc++6.0中),而一个字符占1个字节。将整数看做字符时,4个字节中只是用最右端1个字节,而舍弃其他3个字节。将字符看做整数时,会先在它ascII的二进制数之前(左边、高位)补3个8比特都为0的字节凑足“4”字节。由于ascII 码的范围在0~255,一般情况下与之混用的整数也不超过0~255.

注意:大写字母的ascII码比对应小写字母的小32,故大写字母字符+32=对应小写字母字符

小写字母字符-32=对应大写字母字符

转义字符:

转义字符仍表示一个字符,\是与后面内容作为一个整体的。

有特殊含义的字符如果想表示它本身,都必须用转义的形式,不然就分不清是在表示特殊含义还是表示它本身。有特殊含义的字符主要有三个:斜杠(\)、单引号、双引号。要表示这3个字符,必须用\的形式,分别写作:'\\','\'','\"'。

注意:

'\1~3位的八进制数':含义:表示一个字符,这个字符的ascII码的八进制为\后面的数,八进制数不必以0开头,但最多3位。

'\x1~2位的十六进制数':含义:表示一个字符,这个字符的ascII码的十六进制为\x后面的数。x必须小写,十六进制数不要在写前缀0x,最多2位。

使用转义字符,还可以通过字符的ascII码,把任意一个字符表示出来。'x41'、'\101'、'A'等价,都表示字符'A'。课件通过转义字符,对同一个字符可有多种表示方法。

转义字符一定要写在引号之内,因为它仍属于字符常量。

(2)字符变量

用关键字char定义字符型变量,例如:char  c;c='A';/*也可写作:c=65*/

一个字符型变量只能保存一个字符。让字符型变量保存整数或参与整数运算也是可以的。因为字符和整数是混用的。由于字符型变量也可保存整数,因此字符型变量也有有符号和无符号的区别,用signed char(或省略 signed)定义的是有符号的字符型变量,可保存-128~127范围的整数;用unsigned char 定义的是无符号的字符型变量,可保存0~255范围的整数。但无论如何均占1字节。

字符串型常量:

字符串包含多个字符,每个字符占一个字节存储,存储的是字符的ascII码的二进制。需要注意的是,字符串在所有字符的最后都必须再多占1个字节存字符’\0‘。

用printf函数可以直接输出字符串常量。举例:printf("nihao!");printf("\101");/*将在屏幕输出A,即输出仅包含一个字符A的字符串*/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,585评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,923评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,314评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,346评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,718评论 3 291
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,828评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,020评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,758评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,486评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,722评论 2 251
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,196评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,546评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,211评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,132评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,916评论 0 200
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,904评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,758评论 2 274

推荐阅读更多精彩内容

  • •1 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使读者对c语...
    CONLYOUC阅读 8,628评论 9 66
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,390评论 3 44
  • 版权声明:本文为 gfson 原创文章,转载请注明出处。注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢...
    gfson阅读 2,681评论 0 6
  • 整理自:CocoaPods详解之----进阶篇 一、Podfile.lock文件 在开始使用CocoaPods,执...
    刘大帅阅读 1,420评论 0 6
  • react 没有最好的框架,只有最合适的框架 angular1 vue angular1和react 复杂度 r...
    zhang南方有嘉木阅读 269评论 0 0