Unix/Linux环境C编程入门教程(23) 字符数字那些事儿
包含头文件:
#include <stdlib.h>
函数原型:
int atoi( const char *str );
功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str 中读到非数字字符则结束转换。
参数str字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。
示例代码:
i = atoi( "512.035" );
i 的值为 512.
2.atol函数
包含头文件:
#include <stdlib.h>
函数原型:
long atol( const char *str );
函数功能:将字符串转换成长整型数并返回结果。函数会扫描参数str字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时才结束转换,并将结果返回。
返回值:返回转换后的长整型数。如果传入的字符串为空,或者字符串包含的内容非阿拉伯数字序列,则函数返回默认值0
示例代码:
x = atol( "1024.0001" );
x的值为1024L.
3.atof函数
所需要的头文件:
#include <stdlib.h>
函数原型:
double atof( const char *str );
函数功能:
将字符串str转换成一个双精度数值并返回结果。 参数str 必须以有效数字开头,但是允许以"E"或"e"除外的任意非数字字符结尾。
返回值:
返回转换后的浮点型数
示例代码:
x = atof( "42.0is_the_answer" );
x的值为42.0.
通过这个3个函数我们是不是发现了什么呢?
ato* 型
如果是i 代表int也就是从ascii码值转化成一个int的值,
同理 l 代表转换成一个long型的值,
f代表转换成一个float型的值。
4.Linux中查找这些函数
我们进入到Linux桌面
点击在终端中打开
在终端中输入 man atoi
如下显示的是man中关于atoi atol的介绍
同理我们可以使用man查看atof的介绍 在终端中键入:man atof
退出man帮助文档的界面
5.小试牛刀
下面我们使用这3个函数写几行有意思的代码加深理解。
#include <stdio.h> //printf scanf
#include <stdlib.h> //atoi atol atof int main(void)
{
char input[32]="4294967299";
int iNum = atoi(input);
float fNum = atof(input);
long lNum = atol(input);
printf("int = %d\nfloat = %f\nlong = %ld\n",iNum,fNum,lNum);
return 0;
}
在RHEL7中打开终端 利用vi创建一个main.c或者在windows上传送进虚拟机
回车进入
同时按下:键和shift键 进入末行模式 然后输入wq
保存并退出之后会到终端的界面
下面开始编译 ./itcast运行可执行文件 结果显示出来了
慢着 怎么int的值输出3了呢?
思考一下 我们输入的字符4294967296这个数值是太大了
6.数据类型与范围
超过int的范围 所以一旦数值超过了该数据类型所能表示的范围就会发生溢出
数据模型决定了C语言中基本数据类型与数据宽度的对应关系。我们常用的32位模型称为ILP32,而64位模型有三种:LP64、LLP64和ILP64。在64位模型中,指针一定是64位的,但是int和long的宽度则在不同的数据类型中有不同的定义。
现在的Windows 32和Linux 32是ILP32;Windows x64 版采用的是LLP64模型,Linux64采用的是LP64模型,用gcc编译时可以指定-m32按照ILP32模型进行编译。
|
数据类型\模型 |
LP32 |
ILP32 |
LLP64 |
LP64 |
ILP64 |
|
char |
8 |
8 |
8 |
8 |
8 |
|
short |
16 |
16 |
16 |
16 |
16 |
|
int |
16 |
32 |
32 |
32 |
64 |
|
long |
32 |
32 |
32 |
64 |
64 |
|
long long |
64 |
64 |
64 |
64 |
64 |
|
pointer |
32 |
32 |
64 |
64 |
64 |
总结:使用一个数据类型的时候我们应该清晰的知道该数据类型的范围能否完全表示这个变量
7.其他环境中效果怎么样呢?
在Solaris x64上
在RHEL6 32bit上
在MAC x64上
通过上述实验我们可发现,不同的操作系统可能对于数据类型的采用也是不一样的。
这对于我们以后要写一个跨多个操作系统的程序提出了警示。
有兴趣的同学可以去研究一下,对应着本文给出的数据类型和模型的对应图去推测各个操作系统的选用数据类型的版本。
Unix/Linux环境C编程入门教程(23) 字符数字那些事儿的更多相关文章
- Unix/Linux环境C编程入门教程(26) 字符数字那些事儿
1.gcvt() strtod() strtol() strtoul() toascii() tolower() toupper函数介绍 gcvt(将浮点型数转换为字符串,取四舍五入) 相关函数 ec ...
- Unix/Linux环境C编程入门教程(30) 字符串操作那些事儿
函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...
- Unix/Linux环境C编程入门教程(29) 内存操作那些事儿
函数介绍 memccpy(拷贝内存内容) 相关函数 bcopy,memcpy,memmove,strcpy,strncpy 表头文件 #include<string.h> 定义函数 voi ...
- Unix/Linux环境C编程入门教程(28) 日期时间那些事儿
记得这个专题第一篇我们写过一个程序运行时间的程序,采用库函数提供的clock()模拟做程序测试.本篇介绍的函数也是和时间相关,但是没有clock的细致,而是提供的系统时间和日期. 1.asctime( ...
- Unix/Linux环境C编程入门教程(32) 环境变量那些事儿
1. getenv() putenv()setenv()函数介绍 getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdli ...
- Unix/Linux环境C编程入门教程(19)Red Hat Entetprise Linux 7.0环境搭建
位架构,包括英特尔X-86_64.Power和s390.动态定时能力将降低内核内部中断数量,Open vSwitch 2.0功能可调节虚拟机之间的流量.RHEL 7中默认的文件系统是XFS,包含了一个 ...
- Unix/Linux环境C编程入门教程(5) Red Hat Enterprise Linux(RHEL)环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out执行出结果,证明C++程序编译成功,也就说明li ...
- Unix/Linux环境C编程入门教程(4) Debian Linux环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 1.广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品,由于Deb ...
- Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 2010年9月,Oracle Enterprise Linux发布新版内核--Un ...
随机推荐
- 全 Javascript 的 Web 开发架构:MEAN
http://developer.51cto.com/art/201404/434759.htm 全 Javascript 的 Web 开发架构:MEAN 引言 最近在Angular社区的原型开发者间 ...
- 基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)
SD卡已经看了两天了,主要是因为测试出来的卡容量不对,所以一直找原因,最终还是发现了,总比不过是单位上面出现了问题,或许是之前没有接触到SD的缘故吧,所以对其中的一些寄存器很不了解,一切都是重新开始, ...
- 你真的会玩SQL吗?透视转换
原文:你真的会玩SQL吗?透视转换 透视转换是一种行列互转的技术,在转过程中可能执行聚合操作,应用非常广泛. 本章与 你真的会玩SQL吗?数据聚合 内容比较重要,还涉及到 你真的会玩SQL吗?Case ...
- 【Xamarin挖墙脚系列:IOS现有的设备SDK /OS/硬件一览】
附件下载: http://pan.baidu.com/s/1o7rsrUE
- SQL Server2005使用CTE实现递归
本文来自:http://www.cnblogs.com/wenjl520/archive/2010/01/18/1650393.html CTE递归原理: 递归CTE是由两个最小查询构建的.第一个是定 ...
- Js apply 方法 具体解释
Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了 ...
- hive大数据倾斜总结
在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的 Counters是整个Job的总和,优化是基于这些Counters得出的 ...
- android一些常用的代码2(收藏)
1.收集设备信息,用于信息统计分析 public static Properties collectDeviceInfo(Context context) { Properties mDeviceCr ...
- android:padding和android:margin的区别
Android的Margin和Padding跟Html的是一样的.如下图所示:黄色部分为Padding,灰色部分为Margin. 通俗的理解: Padding 为内边框,指该控件内部内容,如文本/图片 ...
- jsp基础之 jstl
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供 ...