• 关于C有符号数数值溢出


    #1 什么是溢出
    当前计算机采用2补码方式编码数字,以8位为例,表达的全部数值范围为 -128 -- 127。
    正数符号位为0,负数符号位为1。
    1000 0000表示 -128,快速计算方式是将其当作无符号数 128,然后减去 2^8, 全部过程为 128 - 256 = -128。
    或者反码后加一,同样为 1000 0000 ,即128,当然是 -128。
    溢出也就是数值逾越了当前数值表表达范围。例如 138 不在 -128 -- 127范围内。

    #2 加法运算中的简单补救措施
    例如 120 + 121,120和121都是正常范围内可以表达的数字,但其和 241 属于溢出。
    再如 -120 -121,结果同为溢出。
    第一种情况的处理: 强制类型转换为对应无符号数即可。
    第二种情况的处理: 先使用neg指令,在输出时在结果前加负号,可得正确结果。 neg  等效于先取反再加1

    #3 如何判断: 操作数同号 && 操作数与结果不同号

    #4 范例与截图

     1 #include <stdio.h>
     2 typedef signed char INT8;
     3 
     4 int main(){
     5     INT8 m = 120;
     6     INT8 n = 121;
     7     INT8 r = m + n;
     8     printf("%u\n", (unsigned char)r);
     9 
    10     m = -120;
    11     n = -121;
    12     r = m + n;
    13     _asm{
    14         neg r
    15     }
    16     printf("-%u\n", (unsigned char)r);
    17 
    18     getchar();
    19     return 0;
    20 }

    结果:

    241

    -241

  • 相关阅读:
    Core Location定位
    iOS中的round/ceil/floorf函数略解
    NSDateFormatter相关整理
    iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
    自定义带DropDownTable的TextField(事件)
    自定义带DropDownTable的TextField(UI部分)
    读取json文件内容
    在UITextview中添加链接属性的文字
    自定义弹出框Alter
    给UIView加上点击事件
  • 原文地址:https://www.cnblogs.com/servo/p/2709744.html
Copyright © 2020-2023  润新知