零基础学C语言(4):基本数据类型——整型

上一节我们用如何用程序写一个计算器的例子,延伸到为啥会有数据类型、变量和常量的存在,并介绍了赋值和等于的区别。从这节开始详细分析这三个概念,从基本数据类型的整型开始,不多比比,直接上主菜。

BOOL型

上一节那张图大家还有印象不,算了,我再放一张吧。

在讲基本类型前,先说说一个特殊的存在——逻辑类型我们用bool表示,当bool值为1,表示正确;bool值为0,表示错误

记住,bool类型只有1和0两个值。如果你要在程序中使用bool类型的数据,记得引用#include <stdbool.h>这个头文件。第一节我们说了,用人家东西就要跟别人打声招呼。使用方式为bool a;

一般来说,我们使用bool类型时,不具体赋值0和1,而是用false和true代替,值是一样的,主要是仪式感。

还有一点需要强调,那就是,值为何才表示正确呢?

记住,在C语言中非0即为真(真:正确),例如5、20都是真,-10也是真,只有0表示假(假:错误)。

给大家演示一下:

这里使用if语句进行验证,还记得我们之前说的main函数{}作用吗,表示括号的程序属于main()里的,这里{}里的内容属于if()语句的。这段程序写的是,如果10是真,就打印“aaa”;如果-250是真,就打印“bbb”;如果0是真,就打印“ccc”,我们看执行结果:

从结果看,10和-250都是真,0为假,即验证了C语言中非0即为真。

整型

整型分为char、short、int、long,最大的特点就是在不同平台或编译器下所分配的内存空间不同,这里我们统一按32位系统处理

1. char

char其实是一个字符型,但也可以定义整型,在32位操作系统中储存大小为1字节

这里出现了一个新的概念——字节(Byte,简写为B)字节是计算机信息存储容量的计量单位,和大家用米做计量长度的单位一样,只不过这里是计算机用的单位。

大家都知道,电脑只认识二进制数字串,就是“0”和“1”,一个“0”或者“1”,就是一位,位用bit(比特)表示,那101010就是6个数字,就是6位,32位系统就表示一次性可以处理32位数据。

一个字节是8位,也就是有8个二进制数。而字符型char大小为一个字节。

每一种基本数据类型都有两种形式:有符号数(signed)和无符号数(unsigned)

如果是无符号数,最小是0000 0000,为0,最大为1111 1111,即2^8-1,为256

如果是有符号数,最高位为符号位,0表示正,1表示负

0 000 0000~0 111 1111,范围为0~127;1 000 0000~1111 1111,范围则为-1~128;所以unsigned char范围是0~255,signed char的范围是-128~127

注:

①.如果不写signed或者unsigned,则代表默认有符号signed

②.所有数据在计算机中均以补码的形式存放

啥叫补码?

你看,C语言就是这样有趣,一环套一环。在计算机中有三种码制:原码、反码和补码,简称原反补。

正数:原反补一致,均是原码本身

(char)举例:

为啥用char型的数举例呢,因为字节少,没别的原因。

正数:10

原码:0 000 1010(二进制、八进制、十进制、十六进制之间的转换会算吧,高中应该都学过的)

反码:0 000 1010

补码:0 000 1010

再看负数:-10

原码:1 000 1010

反码:1 111 0101反码是在原码除符号位不变,其余位取反

补码:1 111 0110 补码 = 反码 + 1

这也是计算机中对于数值-10最终的存放形式

因为char型数据的数值较小,所以会导致数据的越界问题,而越界不会报错

假如给signed char型数据赋值129(signed char的范围是-128~127),那我们最终看到的数是多少呢?

先看结果:

答案是-127,我透,你电脑坏掉了吧,额……虽然我的电脑用了五年,确实卡的要死,但真的没有坏掉,那为啥是-127呢?

我们来推理下:

首先129是个正数,所以原反补一样,即

原码:1000 0001

反码:1000 0001

补码:1000 0001

唉,这个时候计算机看到最高位是1,又是个有符号的数,就会认为这是一个负数,会按照负数的方式处理。计算器存的是补码,给我们显示的是原码,所以我们要倒推出原码来:

补码:1000 0001

反码:1000 0001 补码 = 反码 + 1.那么反码 = 补码 - 1

原码:1111 1110 符号位保持不动,其余各位取反

结果为-127,是不是很神奇。

char整型就介绍到这里,char字符型之后再说。

2.short

短整型,占两个字节,也就是16位,定义方法为short a;前面有unsigned就是无符号整型,数据值的范围为-32768~32767,没有就默认有符号,数据值的范围为0~65535

3. int

整型(拆解hello world留下的坑终于填了,我太好了),占4个字节,也就是32位,定义方法为int a;前面有unsigned就是无符号整型,数据值的范围为……按计算器太麻烦了,反正不超过10位数就行。

说起int,我想起一个血泪史,看过前文的应该都知道,我其实不是直接接触C语言的,而是从单片机学起的。

51单片机,是个8位的,那里面的int是占2个字节,然后我就一直以为int 占两个字节,直到我学C语言的时候,书上写int是4个字节时,我笑了,举手就向C语言老师纠错,“老师,int是两个字节,书上错了。”我永远也忘不了老师那种看沙雕的眼神。

上课玩手机它不香吗?睡觉它不香吗?上课和心仪的对象聊天它不香吗?啪!上大学还挑课本的毛病,简直有毒。从此我就明白了一个道理:少说话,多做事!

虽然我被狠狠打脸,但是我们可以看到,在不同的系统下,数据类型所占字节数是不一样的,在8位单片机下,int确实是2个字节,和32位下的short一样,这也是一开始我强调是在32位系统下的分析。

记住,如果以后做题碰到问字节的问题,没有给明是什么操作系统,一律默认32位。

3. long

长整型,也是占4个字节(32位操作系统中,x86),但在64位操作系统下long就占8字节了(x64)

以上是整型数据类型的基本类型了,但有时候大家会看到long long或者是long int这种写法,其实也没什么稀奇的,32位中,long long占8字节,long int占4字节,大家不必纠结,因为这些都不常见,也没什么卵用。

但你们知道,我是个好人,上面这么多内容,我怎么忍心看着大家死记硬背呢。

这里给大家列了一张表,不用多说了吧,点赞、关注和转发,懂我意思吧。

总结

本节给小伙伴们详细介绍了char、short、int和long这四种基本整型数据类型,在介绍之前,还给大家讲了一种特殊的数据类型,叫bool,使用方法也详细介绍了。

同时还穿插了原反补三码,以及数据越界(注意,数据越界编译器不报错!不报错!不报错!)的分析,以及各种整型数据类型所占字节数、取值范围。

那既然有整型,有没有非整型,比如小数呢,当然有啦,下一节继续!

上节作业讲解

下面哪种赋值方式符合C语言标准(假设所有变量均已定义)?

A = b; 4.5 = xs; c = 5 + 8; sd = c+7; d = 79.3 + d; a+b = 89; a == 23; i++; ++i;

根据上节所学的知识,赋值号的左边必须是一个变量,复制号右边不限制,符合上述条件的是A = b; c = 5 + 8; sd = c+7; d = 79.3 + d; a == 23; i++; ++i;

最后两个为什么也符合呢?

这两种都表示i = i + 1;,也叫自增1,那++i和i++有啥区别呢?

嘿嘿……

本节作业

定义一个signed char型变量a,a = 128; 输出a的值是多少?请具体分析,并打印验证,欢迎小伙伴在评论区晒出你的作业!.

温馨提示:第一节有一个很奇怪的链接,大家记得保存哦~

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

推荐阅读更多精彩内容