首页 > 编程语言 > 详细

C语言之整形表示

时间:2021-03-28 11:36:29      阅读:21      评论:0      收藏:0      [点我收藏+]

原码, 反码, 补码

大前提(8Bit情况下,最高位代表符号位)

小前提:设计思路符合时钟计数和数学上模的概念

  • 原码:最直观的表示
    [+1] = [0000 0001]原
    [-1] = [1000 0001]原
    缺点:负数无法直接让计算机计算,结果不对

  • 反码:(解决负数问题)

    1. 正数的反码是自身
    2. 负数的反码是在其原码的基础上,符号位不变,其余各个位取反
    3. 由于计算机不认识人的规定,所以会让符号位参与计算。
    4. 另外,在数学里1-1可以这么写:1 + (-1)
      [+1] = [0000 0001]反
      [-1] = [1000 0001]原 = [1111 1110]反
      缺点:反码计算会产生1000 0000 和0000 0000两种表示0的结果(+0,和-0)
  • 补码(解决0符号位问题)

    1. 正数的补码是自身
    2. 负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后加一
      [+1] = [0000 0001]原
      [-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补

有效的解决了-0的问题 [-0] = [1000 0000]原 = [1111 1111]反 = [0000 0000]补 = [+0]
那么原来的[1000 0000]在内存中表示什么呢,规定表示 -128 他没有原码和反码,因为他是-0弃用的表示
具体和硬件实现有关8bit能表示256个数 [-128] Mod 256 = 128 ,就是说从正向数128就是-128,
但是由于正数在内存(二进制表示)里规定是0开始的。所以正数最大值要-1

结论:

1.8位有符号整形的表示范围 -128~127
2.8位无符号整形的表示范围 0~255

C语言之整形表示

原文:https://www.cnblogs.com/ming-fei/p/14587688.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!