博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串转换成整数
阅读量:7111 次
发布时间:2019-06-28

本文共 1501 字,大约阅读时间需要 5 分钟。

参考自:http://taop.marchtea.com/01.03.html

下面是我实现的代码,如有不妥之处,望指正,谢谢!

顺便提一下:

const
int
INT_MAX = (
int
)((unsigned)~0 >> 1);
const
int
INT_MIN = -(
int
)((unsigned)~0 >> 1) - 1;
对0取反(得到0FFFF),然后强制转换为无符号型整数(这样移位才有意义,否则跟没有移位的结果一样,可以查看反汇编验证),再左移1位(这里对无符号整型操作,使得符号位为0,所以就得到7FFF,即有符号的最大值);
其实当你通过反汇编验证时,就应该发现计算机中存储的是一个数的补码(毕竟计算机中的运算时通过补码实现的),而补码只有一种0,最小负数为8000(这里都是通过两个字节来讲的)。
#include 
const int INT_MAX = (int)((unsigned)~0 >> 1);const int INT_MIN = -(int)((unsigned)~0 >> 1) - 1;int StrToInt(const char *str){ if (str == NULL) { printf("The string is null!"); exit(1); } int num = 0; if (str[0] != '-' && str[0] == '+' || (str[0] -'0' <=9 && str[0] - '0' >=0)) { for (int i = 0; str[i] != '\0'; ++i) { if (str[i] - '0' <= 9 && str[i] - '0' >= 0) { if (num > INT_MAX / 10 || (num == INT_MAX / 10 && (str[i] - '0') > INT_MAX % 10)) { num = INT_MAX; break; } else{ num *= 10; num += (str[i] - '0'); } } else{ printf("Having a wrong with input!"); exit(1); } } } else if (str[0] == '-'){ for (int i = 1; str[i] != '\0'; ++i) { if (str[i] - '0' <= 9 && str[i] - '0' >= 0) { if (num < INT_MIN / 10 || (num == INT_MIN / 10 && (str[i] - '0') > -(INT_MIN % 10))) { num = INT_MIN; break; } else{ num *= 10; num -= (str[i] - '0'); } } else{ printf("Having a wrong with input!"); exit(1); } } } else{ printf("It's wrong!"); exit(1); } return num;}

 

转载于:https://www.cnblogs.com/mingbujian/p/5098344.html

你可能感兴趣的文章
[裴礼文数学分析中的典型问题与方法习题参考解答]4.4.7
查看>>
JAVA存取对象属性时,如果开程多线程,记得对相关存取方法作原子化操作定义...
查看>>
深度学习 vs. 概率图模型 vs. 逻辑学
查看>>
Eclipse中使用javap运行配置详解
查看>>
android开发连接wifi addNetwork 返回-1
查看>>
DHCP租约时间工作原理
查看>>
Scrum敏捷软件开发之技术实践——测试驱动开发TDD
查看>>
php提示Fatal error: Call to undefined function imagecreate()
查看>>
Qt移动应用开发(六):QML与C++互动
查看>>
svn代码统计工具的金额
查看>>
2015第32周三
查看>>
Zero Downtime Upgrade of Oracle 10g to Oracle 11g Using GoldenGate — 3
查看>>
OCP-1Z0-051-标题决心-文章2称号
查看>>
Codeforces 56D Changing a String 编辑距离 记忆dp
查看>>
Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解...
查看>>
Android应用Design Support Library完全使用实例
查看>>
中通打印助手-实现快递面单快速打印(免费使用)
查看>>
付款页面DEMO
查看>>
Swift - 使用Core Data进行数据持久化存储
查看>>
android L新控件RecyclerView具体解释DeMo
查看>>