C/C++基本数据类型

C/C++语言有一组基本数据类型,对应于计算机的基本存储单元和使用这些单元去保存数据的一些常用方式。

基本数据类型如下:

上面表格中的类型是基本的C/C++数据类型,但是在C++11中又有了一些扩展。


C++11中long long整型

相比于C++98标准,C++11整型的最大改变就是多了long long,1995年long long就被提议写入C++98标准,却被C++标准委员会拒绝了。后来,long long类型却进入了C99标准,而且也事实上被很多编译器支持。于是辗转地,C++标准委员会又决定将long long纳入C++11标准。

long long类型有两种:long long和unsigned long long。在C++11中,标准要求long long整型可以在不同的平台上有不同的位长度。但至少要有64位。

在常数字面量时,可以使用LL后缀(或是ll)标识一个long long类型的字面量,而ULL(不区分大小写)表示一个unsigned long long类型的字面量。

long long int lli = -90000000000000000LL;//定义一个有符号的long long变量lli
unsigned long long int ulli = 90000000000000000LL;//定义一个无符号的unsigned long long变量ulli

在C++11中,还有很多与long long等价的类型。比如对于有符号的,下面的类型是等价的:long long、signed long long、long long int、signed long long int这些是一样的;unsigned long long和unsigned long long int也是等价的。

提示:虽然在不同的平台上long long的位数可能不同,但是可以查看<climits>或者<limits.h>中的宏来查看long long的大小。与long long整型相关的一共有三个宏LLONG_MIN、LLONG_MAX和ULLONG_MIN,他们分别代表平台上最小的long long值,最大的long long值,以及最大的unsigned long long值。

//C++程序查看LLONG_MAX和LLONG_MIN的代码实现
#include <climits>
#include <cstdio>
using namespace std; int main(int argc, char *argv[])
{
long long ll_min = LLONG_MIN;
long long ll_man = LLONG_MAX;
unsigned long long ull_max = ULLONG_MAX; printf("min of long long: %lld\n", ll_min);
printf("max of long long: %lld\n", ll_max);
printf("max of unsigned long long: %llu\n", ull_max); return 0;
}

测试平台是Ubuntu的Linux系统,unsigned long long是64位的类型,所以unsigned long long的最大值是0xFFFFFFFFFFFFFFFF(16个F)。


扩展的整型

程序员会在代码中发现一些整型的名字,比如UINT、__int16、u64、int64_t,这些类型有的源自编译器的自行扩展,有的则是来自某些编程环境(比如工作在Linux内核中的代码)。

而事实上,在C++11中一共定义了以下5种标准的有符号整型:

标准同时规定,每一种有符号整型都有一种对应的无符号的整数版本,且有符号整型与其对应的无符号整型具有相同大小的存储空间。

在实际的编程中,这5中基本的整型适用性有限,所以C++11允许编译器进行一些扩展,但是对扩展的整型的使用规则做出了一些限制:

C++11规定,扩展的整型必须和标准的类型一样,有符号类型和无符号类型占用同样大小的内存空间。

由于C/C++是一种弱类型语言,当运算、传参等类型不匹配的时候,整型间会发生隐式的转换,这种过程通常被称为整型的提升。

比如如下的表达式: (int)a + (long long)b 通常会导致变量a提升为long long类型后才与b进行运算。同时,无论是扩展的整型还是标准的整型,其转换的规则由他们的“等级”决定,转换的规则如下:

(1)长度越大的整型等级越高,比如long long int的等级会高于int。

(2)长度相同的情况下,标准整型的等级高于扩展类型。比如long long int和_int64如果都是64位长度,则long long int类型的等级更高。

(3)相同大小的有符号和无符号类型的等级相同,long long int和unsigned long long int的等级相同。但是在进行隐式的整型转换的时候,一般是有符号的转换为无符号的。

Linux编程C/C++的更多相关文章

  1. 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 转载

    基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...

  2. 【转】牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...

  3. Linux 编程中的API函数和系统调用的关系【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...

  4. linux编程获取本机网络相关参数

    getifaddrs()和struct ifaddrs的使用,获取本机IP 博客分类: Linux C编程   ifaddrs结构体定义如下: struct ifaddrs { struct ifad ...

  5. 面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...

  6. Linux编程简介

    Linux编程可以分为Shell(如BASH.TCSH.GAWK.Perl.Tcl和Tk等)编程和高级语言(C语言,C++语言,java语言等)编程,Linux程序需要首先转化为低级机器语言即所谓的二 ...

  7. Linux编程return与exit区别

    Linux编程return与exit区别 exit  是用来结束一个程序的执行的,而return只是用来从一个函数中返回. return return 表示从被调函数返回到主调函数继续执行,返回时可附 ...

  8. linux 编程技术

    linux 编程技术No.1前期准备工作 GCC的编译过程分为预处理.生成汇编代码.生成目标代码和链接成可执行文件等4个步骤. 使用vim编写C 文件 : [lining@localhost prog ...

  9. Linux编程之给你的程序开后门

    这里说的"后门"并不是教你做坏事,而是让你做好事,搭建自己的调试工具更好地进行调试开发.我们都知道,当程序发生异常错误时,我们需要定位到错误,有时我们还想,我们在不修改程序的前提下 ...

  10. 笔记整理--Linux编程

    linux c编程open() read() write()函数的使用方法及实例 | 奶牛博客 - Google Chrome (2013/8/31 17:56:10) 今天把文件IO操作的一些东东整 ...

随机推荐

  1. WCF Rest:不使用UriTemplate使用post方式传参解决HTTP400问题以及参数映射问题

    在使用POST方式向服务提交数据时,出现HTTP400异常,以下代码描述: 服务接口定义: [OperationContract] [WebInvoke(ResponseFormat = WebMes ...

  2. OC学习中遇到的问题总结

    1.不要在初始化的时候用self.方法,因为在初始化的时候self.,此时系统还没有alloc开辟空间,这样做违背了系统流程. 2.善于运用宏定义来控制程序中的变量,这样程序可修改性高. 3.obje ...

  3. codeforces #330 div2

    A: #include<cstdio> #include<algorithm> #include<cmath> #include<map> #inclu ...

  4. Simple Daemon Shell

    PROPATH="/var/www/html/" PROGRAM="vertical" LOGNAME="/tmp/monitor.vertical. ...

  5. zz[C++]合理的设计和使用消息队列

    http://www.cnblogs.com/egmkang/archive/2012/11/17/2763295.html 生产者消费者问题,是永远的经典. 单纯让多个线程去竞争,占有资源然后处理, ...

  6. mac10.9 设置vim tab

    vimrc系统文件目录 /usr/share/vim 在vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)s ...

  7. TCP协议: SYN ACK FIN RST PSH URG 详解

    TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给 ...

  8. 微软云基础架构Hyper-scale Datacenter

    每天醒来,可能很多人的习惯都是打开手机,看看微信,刷刷朋友圈,或者看看新闻,去咖啡店,打开电脑搜索一些关键字,观看视频,电视剧--可是你有没有想过你每一次键盘的敲击,每一次微信的语音的发送,数据会流向 ...

  9. 打开本地STL文件并创建webgl使用的geometry

    需求 打开本地STL文件 一个独立基于webgl的viewer,会被别的网站重用 将打开文件的数据传输给viewer,并且在文件加载的时候显示进度条 解决方案 #1可以使用传统的html5 api来打 ...

  10. 【N年前的文章脑补:HttpHandler HttpModule入门篇】

    HttpHandler HttpModule入门篇 ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHand ...