学习心得:原码,补码是什么?内存溢出后,数字是如何表现的

本文通过一个示例解释了当char类型变量被赋予超出范围的值(如200)时,如何在内存中表示以及如何导致错误的输出。讨论了有符号数和无符号数的区别,以及原码、反码和补码在内存中的作用。最终指出,由于内存溢出,原本赋值为200的char变量在打印时会显示为-56。
摘要由CSDN通过智能技术生成

例:char a=200; printf("%d",a);

问:a会显示多少。


  答案显然不是200,因为char能表达的数字在-128到127之间,200显然超出。

  为了方便下面的探讨,这里要先介绍几个概念。

1.无符号数和有符号数。 

   有符号数:如char ,int定义的数,可以表达负数。

   无符号数:如usigned,unsigend cahr 定义的数,只能表达正数。

   举一个用char定义的数a,它在内存中表现为:1111 1111

   因为a是一个有符号数,所以它的最高位是一个符号位,(有符号数的最高位就是符号位),符号位为1表示-号,为0表示+号。

   所以可以它是一个负数,表示-1。至于为什么是-1,下面讲到原码和补码再讲。

如果a的类型不是char而是unsigned char ,它就是无符号数。此时就不存在符号位,那么正常转化为十进制数,就是255。

2.原码,反码和补码

  为什么要提原码和补码,因为在计算机内存中,所有的二进制数都是以补码形式存在的。

  比如你定义了一个数:char a=1;<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值