1. 首页
  2. > 银行开户 >

101010原码(1010110的原码是多少)

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


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的值是多少?请具体分析,并打印验证,欢迎小伙伴在评论区晒出你的作业!.


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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息