有符号数和无符号数的区别

  C语言允许我们定义有符号数和无符号数,例如一个字节的存储空间,我们可以定义成unsigned char,也可以定义成signedchar,但是你知道它们的区别吗?你知道它们是怎样被存储,又怎样被区分处理吗?

1.有符号数和无符号数的存储

  对于一个字节的存储单元unsigned char的范围为(0 - 255),它的存储方式就是把一个十进制的数转化为二进制的数保存起来,没什么说的。重点在于signed char的处理。

  对于一个字节的存储单元signed char的范围为(-128 - 127)。它的存储方式是“编译器以补码的形式存储”。举个例子,一个字节的存储空间存放了一个数据84h,有符号数存储为-124。

  我们再看这样两个定义“ unsigned char a=132”和“signed char  b=-124”。在调试模式下,可以看到a、b内存单元中的数据都是84h。

结论:利用C语言定义的有符号数和无符号数,计算机本身是不能区分的,它所能做的就是存放一个二进制数据,如此而已。

2.有符号数和无符号数的处理

  区分这些数据类型的工作是交给了编译器来完成;曾经那个编译器还未诞生的年代,这个工作就交给人来完成(猜想)。至于有符号数和无符号数的计算问题,因为指令是不会区分有符号或者无符号,所以这是需要编译器来通过编译出一系列指令完成有符号计算或者无符号计算。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值