C:数值溢出问题

当超过一个数据类型能够存放最大的范围时,数值会溢出。

有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失。

#include <stdio.h>

int main()
{
    char ch;

    //符号位溢出会导致数的正负发生改变
    ch = 0x7f + 2; //127+2
    printf("%d\n", ch);
    //  0111 1111
    //+2后 1000 0001,这是负数补码,其原码为 1111 1111,结果为-127

    //最高位的溢出会导致最高位丢失
    unsigned char ch2;
    ch2 = 0xff+1; //255+1
    printf("%u\n", ch2);
    //    1111 1111
    //+1后 10000 0000, char只有8位最高位的溢出,结果为0000 0000,十进制为0

    ch2 = 0xff + 2; //255+1
    printf("%u\n", ch2);
    //    1111 1111
    //+1后 10000 0001, char只有8位最高位的溢出,结果为0000 0001,十进制为1

    return 0;
}

原文地址:https://www.cnblogs.com/wbyixx/p/12239316.html

时间: 2024-08-07 03:27:57

C:数值溢出问题的相关文章

leecode 278 数值溢出感想

278是一道很简单的题,二分查找而已. 不过它却提醒了我一个很重要的事情,数值溢出问题. int begin, end; 乍一看 (begin + end) / 2 与 begin + (end - begin) /2 没什么区别. 可是 前者可能溢出,后者却不会溢出. 所以尽量用begin + (end - begin) /2. 由此推想, 所有的加法,减法,乘法都可能造成溢出. 有精巧的设计固然重要,可最重要的是在做数值运算时清楚数值的范围.

数值溢出与精度损失

数值溢出与精度损失 整数上溢出 进位超过最高位(无符号)或改变了符号位(有符号) 运算溢出.赋值溢出.无符号数小数减大数 浮点数的上溢出和下溢出 舍入 int=float float=double float=long 浮点数使用阶码储存 float 23位尾数 6~7位 double 52位尾数 16位 二进制小数与十进制小数并不是一一对应的 两个数量级相差很大的浮点数加减运算时,数值小的会被忽略 个人网站:DiffidentAres's Blog 原文地址:https://www.cnblo

17.3.10---&gt;关于数值溢出问题

取值范围: short.int.long 占用的字节数不同,所能表示的数值范围也不同.以32位平台为例,下面是它们的取值范围: 数据类型                             所占字节数          取值范围short                                       2               -32768~32767,即 -215~(215-1)unsigned short                         2      

dotnet core 中数值溢出

.net core中使用C#的int类型,存在数值上下限范围,如下: int max = int.MaxValue; int min = int.MinValue; Console.WriteLine($"The range of integers is {min} to {max}"); 运行得到结果 The range of integers is -2147483648 to 2147483647 此时如果执行以下代码 int what = max + 3; Console.Wr

softmax数值溢出 与 softmax-loss问题

1.在阅读tensorflow源码的softmax实现过程中,可以看到它的实现有两个特殊地方: ①计算e指数的时候,所有logits都减去了每行的最大值 ②其softmax_op_functor.h中,可以看到根据传入的log参数不同分别有两种不同计算方法.log为true时,计算LogSoftmax,log为false时,计算Softmax 其中这两个特殊的地方一个是为了解决数值上溢的问题,一个是解决数值下溢的问题. 具体参考:https://www.codelast.com/%E5%8E%9

一维数组求最大子数组(解决溢出问题)

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 程序在宏里面定义出了数组长度的大小,在长度超过100万的时候程序直接崩溃,其实这并不是因为结果太大导致的数值溢出,而是因为内存溢出,我们的数组是定义在程序内部的,属于局部变量,存放位置在栈上

Swift Compiler Error Arithmetic operation &#39;** &#39; (on type &#39;**&#39;) results in an overflow (溢出运算符&#39;&amp;+&#39;)

Swift Compiler Error Arithmetic operation '****** ' (on type '****') results in an overflow 错误代码: 错误原因是数值运算中出现溢出情况.其结果超过了UInt8的0~255的范围. 和OC不同的是默认不允许在运算中数值溢出.但可以使用溢出运算符来运算 版权声明:本文为博主原创文章,未经博主允许不得转载. Swift Compiler Error Arithmetic operation '** ' (on

LeetCode:String to Integer (atoi)

1.题目名称 String to Integer (atoi) (字符串到数字的转换) 2.题目地址 https://leetcode.com/problems/string-to-integer-atoi/ 3.题目内容 英文:Implement atoi to convert a string to an integer. 中文:实现atoi函数,将输入的字符串(String类型)转换为整型数据(Integer类型) 提示:实现的atoi函数需要满足以下特征 忽略字符串第一个非空格字符前的所

Thinking in Java:容器深入研究

1.虚线框表示Abstract类,图中大量的类的名字都是以Abstract开头的,它们仅仅是部分实现了特定接口的工具,因此创建时能够选择从Abstract继承. Collections中的实用方法:挑几个经常使用的: 1. reverse(List):逆转次序 2. rotate(List,int distance)全部元素向后移动distance个位置,将末尾元素循环到前面来(用了三次reverse) 3.sort(List,Comparator) 排序,可依照自己的Comparator 4.