数据类型的溢出

1. 如何自己计算得到边界值

注:整数常量的数据类型默认为:能表示该数的最小数据类型。

以下从小到大排列,选择表中能够表示该整数常量的第一个数据类型(如 8 选 int,2^32+10 选 long int)

- 10进制常量可选:int, long int, long long int

- 8进制或16进制常量可选:int, unsigned int,long int,unsigned long int, long long int,unsigned long long int)

// 计算数据类型的边界:最小值和最大值
//
#include <iostream>
using namespace std;
int main()
{
    //计算无符号整型
    unsigned int uint_max, uint_min;
    uint_max = ~(unsigned)0;//按位取反
    uint_min = 0;
    cout <<"uint_max = " << uint_max << endl;
    cout <<"uint_min = " << uint_min << endl;
    //计算有符号整型
    int int_max, int_min;
    int_max = (~(unsigned)0 >> 1) ;
    int_min = -int_max - 1;
    cout <<"int_max = "<< int_max << endl;
    cout <<"int_min = "<< int_min << endl;
}

2. C/C++库文件的数据类型边界

在C语言中的各数据类型的边界如下:

包含在头文件#include <limits.h>

c++包含在#include <limits> – 引用的是limits.h的内容

//limits.h
#define MB_LEN_MAX    5             /* max. # bytes in multibyte char */
#define SHRT_MIN    (-32768)        /* minimum (signed) short value */
#define SHRT_MAX      32767         /* maximum (signed) short value */
#define USHRT_MAX     0xffff        /* maximum unsigned short value */
#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */
#define UINT_MAX      0xffffffff    /* maximum unsigned int value */
#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
#define LONG_MAX      2147483647L   /* maximum (signed) long value */
#define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */
#define LLONG_MAX     9223372036854775807i64       /* maximum signed long long int value */
#define LLONG_MIN   (-9223372036854775807i64 - 1)  /* minimum signed long long int value */
#define ULLONG_MAX    0xffffffffffffffffui64       /* maximum unsigned long long int value */

3. 如何判读溢出

参考传送门:

C语言的整型溢出问题:http://www.kuqin.com/shuoit/20140421/339376.html

#include <limits.h>
//有符号整型的判断溢出
void f(signed int si_a, signed int si_b) {
    signed int sum;

    /* Handle error */
    if (((si_b > 0) && (si_a > (INT_MAX - si_b))) ||
        ((si_b < 0) && (si_a < (INT_MIN - si_b)))) {

        return;
    }

    sum = si_a + si_b;
}
时间: 2024-09-29 10:38:36

数据类型的溢出的相关文章

SDUT 周赛 神奇的树(简单题 注意数据类型的溢出 )

神奇的树 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 SDUT有一颗神奇的苹果树.假如某天早上这树上有x个苹果,那么这树这一天会再结出x个苹果来,也就是说到了晚上会有2*x个苹果,到了深 夜,会有专人人来摘苹果,而摘苹果的人总会使苹果数剩下当前数量对m的余数,也就是说假如当前数量为a,那么第二天早上会剩下a%m个苹果.也许聪明的你 已经发现了,有可能从某一天开始,这棵树上就再也没有苹果了.那么给你第一天早上的苹果数,请你判

04 java 基础:数据类型

java 数据类型:基本类型与引用类型 基本类型:数值型,其中数值型分为整型.浮点型,整型包括 byte.short .int.long ,默认为 int 类型.浮点类型分为单精度.双精度,分为 float.double ,默认为 double 类型.注意各种类型所占用空间大小. 除数值型,还包括 bool.char 类型,其中 char 类型可对应 int 数字. 溢出:强制类型转型导致溢出.数据类型不够溢出 引用类型:类.接口.数组 原文地址:https://www.cnblogs.com/

[转载]我的WafBypass之道(SQL注入篇)

现在位置: 首页 > 文章 > Web安全 > 正文 我的WafBypass之道(SQL注入篇) 2016 /11/23 16:16 6,444 评论 3 条 [本文转自安全脉搏战略合作伙伴先知技术社区 原帖地址  安全脉搏编辑huan9740整理发布] 0x00 前言 去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常 谈的话题也没什么可写的. 很多人一遇到waf就发懵,不知如何是好,能搜到的各 种姿势也是然并卵. 但是积累姿势的过程也是迭代的,那么就有了此文,用来

我的WafBypass之道(SQL注入篇)

原帖地址:https://xianzhi.aliyun.com/forum/read/349.html 0x00 前言 去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常 谈的话题也没什么可写的. 很多人一遇到waf就发懵,不知如何是好,能搜到的各 种姿势也是然并卵. 但是积累姿势的过程也是迭代的,那么就有了此文,用来总 结一些学习和培养突破waf的思想. 可能总结的并不全,但目的并不是讲那些网上 搜来一大把的东西,So-并不会告诉大家现有的姿势, 而是突破Waf Bypas

小康陪你学JAVA--------溢出的发生

此篇介绍JAVA 中在编写程序的过程中可能出现的一类问题——溢出的发生. 首先来看一下JAVA整数常量的特殊值代码: 01 //  整数值如果超出了自己所可以表示范围的最大值,会出现溢出 02 public class TestJava3_4 03 { 04    public static void main(String args[]) 05   { 06     int x = java.lang.Integer.MAX_VALUE ;    //  得到整型的最大值 07 08  Sys

翻译:DECLARE Variable(已提交到MariaDB官方手册)

本文为mariadb官方手册:DECLARE Variable的译文. 原文:https://mariadb.com/kb/en/library/declare-variable/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/declare-variable/ 语法: DECLARE var_name [, var_name] ... type [DEFAULT value] 描述 该语句用在该语句用来在存储程序stored programs中声

JAVACard 基本数据类型的运算及溢出问题

一.数据的运算 在目前javacard开发中,能用到的基本数据类型是byte和short,而对与java来说这两种都是有符号的数,因此在基本运算时会有大量的强制类型转换,因此经常导致数据溢出的情况,为了以后少掉进坑里,这里做简要的记录. 当整数的数据大小超出了可以表示的范围的时候,而程序又没有做数值检查,就会发生数据溢出的问题.例如对于byte的整数来说,其表示的范围大小是-128~127:short类型的基本数据的取值范围为-32768~32767.在javacard中大部分涉及到byte数据

关于EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 EXP-00000: 导出终止失败 的问题解决方法整理

在客户端用exp导出数据库的时候,遇到如下情况 ... .... ...... .. 正在导出同义词 . 正在导出视图 EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 EXP-00000: 导出终止失败 在导完表.同义词.视图后出现EXP-00056: 遇到 ORACLE 错误 1455 这样的问题我连续遇到两次. 我查过网上许多帖子,解决方法都不一样: 第一种: SQL> connect / as sysdba SQL> @catmet

numeric 转换为数据类型 (null) 时出现算术溢出错误

mssql数据同步到mysql时提示错误如下: 消息 8115,级别 16,状态 14,第 1 行 将 numeric 转换为数据类型 (null) 时出现算术溢出错误 问题分析如下: 1.数据字段类型限制超出最小最大值 2.mysql字段属性有个“unsigned”限制, 非负数