专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

换个角度带你学C语言的基本数据类型

  摘要:C语言的基本数据类型,大家从学生时代就开始学习了,但是又有多少人会试图从底层的角度去学习呢?这篇文章会用一问一答的形式,慢慢解析相关的内容和困惑。
  本文分享自华为云社区《从深入理解底层的角度学习C语言之基本数据类型云社区华为云》,作者:breakDawn。
  C语言的基本数据类型,大家从学生时代就开始学习了,但是又有多少人会试图从底层的角度去学习呢?这篇文章会用一问一答的形式,慢慢解析相关的内容和困惑。数据类型位数和符号数据类型转换浮点数数据类型位数和符号
  问:C里的签名和unsigned类型的区别是什么?
  A:拿unsignedchar无符号char和signedchar有符号char举例(因为他们都是1字节,比较好举例子)
  假设某个局部变量a,内存里存的都是0xff(即二进制11111111)
  执行printf(d,a)时,输出的是255,还是1呢?
  如果a是无符号,那就是255。
  如果a是有符号,那就是1。
  Q:为什么有符号的0xff输出的是1?
  A:这个就是补码的概念。
  正数的补码就是其本身
  负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后1。(即在反码的基础上1)补码的计算方式:如果是1,则负号就是首位的1,而1里的1作为二进制是0000001,取反1,得到1111111,和首位1拼接,变成了11111111。进行printf打印时,C语言通过变量类型,确认11111111的首位是符号位,于是通过补码的反向计算,得到实际真值为1。如果是无符号,则C语言通过变量类型,确认11111111的首位不是符号位,不需要反向计算,于是直接输出255。
  原码、反码、补码对于1和1的表示如下
  〔1〕〔00000001〕原〔00000001〕反〔00000001〕补
  〔1〕〔10000001〕原〔11111110〕反〔11111111〕补
  Q:已知正负数默认都是补码的形式,为什么不能用原码表示数字呢?即只用第一个标识符号位,后面7位就是代表真实绝对值
  A:计算机CPU做计算时,无法区别符号位,只会死板的将8位数字进行加法计算。
  假设做减法,就和下面那样
  111(1)〔00000001〕原〔10000001〕原〔10000010〕原2
  可以看到符号位的信息会误导减法的计算。
  Q:那为什么不用能反码呢
  A:因为反码对于0的表示有两种情况,11111111可以代表0,而00000000代表0,相当于浪费了。
  而补码不存在这个情况。11111111代表1,00000000代表0。
  Q:为什么要有补码?补码有什么好处?
  A:当计算机执行11时,希望都是用加法的动作来做,且不希望做ifelse判断,根据符号位去判断正负再做加减,对计算机的消耗是很大的。
  使用补码的机制,则可以将11转成变成1(1)
  那么1就是补码0xff,和0x01相加,变成了0,即不需要做真正的减法即可
  Q:刚才提到CPU希望都是位加法,不肯做减法,为什么?
  A:因为CPU的减、乘、除都是基于加法、移位等操作实现的。
  加法过程依赖CPU的ALU累加器,累加器背后的电路是数字电路异或门和与门的组合。
  Q:为什么补码表示的情况下,范围是128到127?为什么补码会比原码和反码多一位?
  A:就是上面提到的0的问题。原码的10000000、00000000都表示0,补码的11111111和00000000都表示0,而补码只有1个0的表示
  同时补码有一个100000000,把后7位取反1,等同于128。
  原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)
  Q:计算机在CPU做计算时,怎么识别是无符号还是有符号?
  A:CPU所处理的寄存器、内存中的数本身无符号信息。CPU做加减法时会一起做无符号数的进位有符号数的溢出标志,并不专门对待有符号数和无符号数。
  有无符号的区别是只属于(中)高级语言的概念,反映到机器语言上,是跟运算及与其结果相关的指令上的区别,而不会反映到CPU所处理的数本身。
  即CPU处理时,统一用加法处理,但是否要做求补等操作,取决于提供的运算指令。
  问:C语言的char是签名char还是unsignedchar?
  一个:当你定义为char时,可能是signedchar,也可能是unsignedchar。这个取决于你编译器的实现。fun签名字符:设置为未签名字符fnosignedchar:设置为非签名字符签名字符:设置为签名字符fnounsignedchar:设置为非无符号字符
  Q:int有可能像char一样,即可能是signedint也可能是unsignedint吗?
  A:int一定是有符号int。不会因为编译器不同而不同。
  Q:为什么char可以区分有符号或者无符号,但是int只能默认为signedint?
  A:个人理解和应用场景有关,char不一定会参与计算,而int大部分情况下都是有符号计算,因此默认为signedint比较好。
  问:ILP32、LP64、LLP64分别是什么?
  A:指的是这个操作系统中,有哪些类型分别是多少位的意思。
  我指林特
  L指龙
  LL指龙长
  P指点指针
  32和64就是分别指32位和64位。32位系统一定是ILP32模型64位系统中,unix一般是LP64,而windows则是LLP64即linux中,long是64位,而在windows中,long是32位,而只有longlong是64位
  Q:为什么windos要用LLP64这么奇怪的模型?这个模型里,long是32位,longlong才是64位。
  A:来自知乎陈硕大佬的回答:
  我猜,是因为WindowsAPI从16bit升级到32bit发生得太晚了大约是随1995年发布的Windows95而普及。
  虽然之前有WindowsNT3。x和Win32s,但似乎比较小众。
  而Unix从16位升级到32bit发生在1980年前后,当时运行在VAX上的Unix32V和3BSD都是32bit的。
  造成的结果是,两边的程序对shortintlong的长度形成了不同的习惯认知:
  Unix程序习惯了int是32bit,而long不一定只有32bit。WindowsDOS习惯了long是32bit,而int有可能是16bit或32bit,因为刚刚从16bit升级上来嘛。
  当往64bit升级的时候,如果把Windows的long升级到64bit,会破坏原来很多程序的假设,
  只好用个新的类型来表示64bit整数了。反正LONGLONG在32bit程序中也是64bit整数,干脆用它好了。
  详细的数据类型展示:
  PS:从上面可以看到java虚拟机的一个优势,就是对开发者而言,屏蔽了各不同系统情况下的数据位数。
  Q:那么又有个问题,java虚拟机如何实现不同平台可以跑相同的java代码,不用担心底层数据类型的?
  A:如图所示,class字节码都是同一份,但是不同的系统,会有不同的虚拟机解释器实现,在解释器实现里处理了不同的数据类型位数情况。数据类型转换
  Q:C里的隐式类型转换有什么规律?
  一个:占用字节数少的类型,向占用字节数多的类型转换;整长占用字节数相同情况下,有符号向无符号转换;未签名的int整数类型向浮点类型转换;整数双单精度向双精度转换;浮加倍
  Q:下面这个例子输出多少,为什么?
  一个:voidTest(){inta1;unsignedb10;if(ab){printf(aisgreaterthanb。);}else{printf(aislessthanorequalb。);}}
  输出b即a大于
  因为a1,存储的二进制是11111111,强转成unsigned时,二进制没有变,但是对编译器而言表示的大小变成了255了。浮点数
  float、double、longdouble的比特数、有效位数、数值范围如下:
  问:下面这个代码输出什么?includestdio。hintmain(void){floata9。87654321;floatb9。87654322;if(ab){printf(ab);}elseif(ab){printf(ab);}else{printf(ab);}return0;}
  A:输出ab,因为float最多7位有效小数点位数。
  Q:32位float,1bit为符号位,23bit为位数,8bit为指数,这3个划分是如何得到float的有效位数以及数值范围的?
  A:IEEE754标准理解。
  【计算机组成原理】IEEE754标准
  有人问为什么要学习这个?
  对于高精度场景下的浮点计算,掌握IEEE754的标准很重要,否则无法理解高精度场景时计算过程出现的各种问题,特别是一些金融场景,对于小数点后面的数字会特别敏感。
  Q:java的BigDecimal类可以表示任意精度,原理是啥?
  A:BigDecimal的原理很简单,就是将小数扩大N倍,转成整数后再进行计算,同时结合指数,得出没有精度损失的结果。
  以long型的intCompact和scale来存储精确的值。
  点击下方,第一时间了解华为云新鲜技术
  华为云博客大数据博客AI博客云计算博客开发者中心华为云

硬盘的最新替换品爱国者P7000z推陈出新的电子产品,固态硬盘进入白菜价的时代,升级两年前的一堆硬盘,现在只用一根爱国者P7000z(2T)替换掉。P7000z采用联芸新一代MAP1602主控芯片长江存储旗下最新的小米电视S65S75系列新品开售原生4K144Hz高刷,2999元起IT之家3月28日消息,小米电视S系列新品今天十点正式开售,提供S65和S75两个版本,支持4K144Hz超高刷,到手价2999元起。据IT之家了解,新款电视搭载原生4K144Hz你身边有刷信用卡拆东墙补西墙的吗?我就属于拆东墙补西壁的那个,不过我的窟窿是越补越少,我从十四万的窟窿补到现在还有五万多了,每个月需要倒卡,但是每个月会把一部分工资补到信用卡里,而且信用卡的窟窿也是因为购房产生的,如果持有10的三一重工的股份,能实现生活无忧吗?三一重工,国内工程机械龙头企业,目前市值约1872。54亿,如果你能持有10的股份,兑换成现金就是187。25亿人民币,这笔钱可以直接让你成为百亿身家的富豪,相当于站在了富豪金字塔顺产时怎样和医生配合能让用力最有效?我是二胎妈妈,两个宝宝都是顺产,当时生二宝更快,到了产房不到5分钟就生了,医生说差点没搂住,生的太快了。顺产时怎样和医生配合能让用力最有效?在进产房之前,也就是第一产程,很关键。如婴儿吃奶吃吃停停是什么原因?好东西要慢慢品,这是个享受的过程。婴儿机灵的很,知道奶奶是属于自己的可以慢慢喝,不着急。以上为戏言,勿认真。婴儿吃奶不专心吃一口停一会首先可能是不饿,饿了的宝宝要是看见乳头或奶头出婆婆重男轻女,对满月孙女痛下狠手,你怎么看待这种事?究竟要把自己放在多卑微的位置,才会让自己忍受这种赤裸裸的愚昧和伤害?这样的婆婆当然又蠢又可恶,但我更气的却是这个妈妈,因为是她自己一再给了婆婆伤害自己和孩子的机会。孩子是自己生自己月球储水层在哪里?嫦娥五号月壤样品提供线索月球究竟有没有储水层?如果有,在哪里?嫦娥五号月球样品为揭开这一谜题带来惊喜。3月27日,国际学术期刊自然地球科学刊发的一篇文章称,中英学者在嫦娥五号月球样品中,测量到撞击玻璃珠中神奇的土星环逐渐消失,真是有外星人在修复?其实土星并不特殊前段时间,有科学家宣布观测到疑似巨大不明飞行物的东西停滞在土星附近,一时间议论纷纷,有网友甚至和2018年NASA一则土星正在侵蚀土星环的消息联系在了一起,猜测这是外星人的宇宙飞船太空垃圾光污染严重,将对望远镜产生潜在干扰原标题太空垃圾光污染严重地球上,天文台或无处安放星链卫星在天文照片上留下了条纹。图片来源美国国家光学红外天文研究实验室星链卫星轨迹影响卡森国家森林的夜空,这是卫星发射后不久拍摄到的多地出现不明飞行物闪光时黑夜变白昼蓝色流星多地现不明飞行物闪光时黑夜变白昼3月27日午夜,我国北方等地区的许多人都目睹了一颗明亮的蓝色流星,包括来自内蒙古赤峰网友。视频截图据青岛爱山天文台称,流星最初是绿色的,然后在燃烧之
大范围暴雨持续滞留,福建广东连下28天?分析不存在,后期北抬在刚刚过去的一天里,我国南北方地区暴雨四处开花在南方地区,充沛的季风水汽组建起了庞大强盛的雨带,监测数据显示,从云南贵州广西到湖南广东福建江西浙江等出现了大片的大到暴雨带,不少地方蜱虫病真要命?近期,河南信阳3人因感染蜱虫病去世的新闻引发大家的关注,那么蜱虫病是什么?它的传播途径和发病临床表现以及如何预防解救措施又有哪些呢?一关于蜱虫病,你了解多少?蜱虫病也称发热伴血小板午睡与寿命有何联系?提醒年过50岁,午睡3不要得记好对于上班族和学生党来说,中午不睡,下午崩溃是一点没有错的。如果工作学习了一个上午,中午不能好好休息一下,下午的工作效率学习效率就会大大降低,甚至有人会出现诸多不适。有人说午睡还与人明天油价再涨95号即将进入10元时代6月14日24时,国内成品油新一轮调价窗口即将开始,看到最近国际原油强势涨价之后的结果,95号成品油即将进入10元时代。近期国际原油价格震荡,全球原油能源持续吃紧,再叠加上地缘政治林彪的三位搭档,每一位都是军事奇才,他们分别是谁?在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持!1955年,年仅48岁的林彪被授予了元帅军衔,不满五十便能够成为元帅,林彪的军事守望先锋2确定将在今年10月5日正式上线,改为免费游戏暴雪在这个月开始公测的手游暗黑破坏神不朽,虽然因为游戏的氪金要素太多,而被玩家所诟病,在评分网站严重差评,但从装机量来看,半个月时间不到已经有超过1000万的玩家数量,这对于暴雪也上外一学生被投放异物,加害者会被如何处罚?据上海外国语大学通报2022年6月12日中午,一学生在图书馆自习时,咖啡杯被学生尹某某投放异物。涉事学生已被公安机关带走调查。那么,加害者会被如何处罚?问法网律师认为,本案可能会涉大学图书馆也不安全了?上外一女大学生的咖啡,被男生投异物大学生本应该是德才兼备的国之栋梁,然而传统的应试教育过于强调学历和考试分数,对学生的品德考察和德育教育,存在很大的疏忽。自从唐山烧烤店事件爆发后,很多大学生对打人者和旁观者都表达了开除!饲养员用膝盖暴击猩猩脸部,直播画面曝光6月11日郑州银基动物王国进行线上直播画面显示饲养员用膝盖撞击了猩猩的脸部猩猩哀嚎着逃离随后直播画面结束还有网友注意到在直播期间饲养员还曾动作粗鲁地把猩猩往座位推这一事件引发众多网香港男子移民美国几十年,当上议员照样被揍,板砖当街砸破头据环球网6月13日报道,近日,美媒曝光了一起针对华裔议员的暴力事件。受害者冯嘉辉(AndersFung)是旧金山密尔布瑞市议员,他在散步的时候,被人用砖头砸中脑袋。美国华人议员当街新式无线插排一出,满屋扯线过时了,整洁美观省空间,太机智随着社会的发展,虽然给人们带来了紧张而忙碌的生活,同时也带来了生活质量的提高。家里各种电器越来越多,生活逐渐实现了智能化,只要肯努力,就可以过上自己喜欢的生活,也可以买任何自己想要
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网