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. PHP学习笔记三

    <?php $a=56; $b=++$a; //等价于 $a=$a+1; $b=$a; /////2. $e=false||true;//结果为true $f=false or true;//输 ...

  2. 数据库监控[Z]

    --查看表锁 select * from sys.v_$sqlarea where disk_reads>100    --监控事例的等待 select event,sum(decode(wai ...

  3. JAVA多线程下,获取递增的序列号

    场景描述: 1,目前我们的系统可以简单归纳成MVC的架构模式 2,每个前端的请求过来,都会在C层开启事务,最后处理结束后,也在在C层关闭事务(实际是在C层的底层统一做了事务的开启和提交):      ...

  4. [汇编语言]-第七章 SI和DI

    1- SI和DI是8086CPU中和bx功能相近的寄存器, SI和DI不能够分成两个8位寄存器来使用, 下面的三组指令实现了相同的功能: (1)  mov bx,0 mov ax,[bx] (2) m ...

  5. URL,URLConnection,HttPURLConnection的使用

    URLConnection与HttPURLConnection都是抽象类,无法直接实例化对象.其对象主要通过URL的openconnection方法获得. 值得注意的是:1.openConnectio ...

  6. 解决C/C++程序执行一闪而过的方法(三种办法)

    简述 在VS编写控制台程序的时候,包括使用其他IDE(Visual C++)编写C/C++程序,经常会看到程序的执行结果一闪而过,要解决这个问题,可以在代码的最后加上system(“pause”).g ...

  7. IT技术 | 让程序员抓狂的排序算法教学视频

    点击「箭头所指处」可快速关注传智特刊微信号:CZTEKAN 原文地址:http://mp.weixin.qq.com/s?__biz=MjM5OTM4NDMyMg==&mid=20056820 ...

  8. 【hihocoder 1257 Snake Carpet】构造

    2015北京区域赛现场赛第4题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...

  9. bug fix: openstack can not run swift for pyeclib and liberasurecode do not match

    最近在使用devstack 安装openstack nimble项目. nimble项目是一个专业的baremetal管理项目. 安装过程中,遇到这个问题. /opt/stack/swift/bin/ ...

  10. uva 10026 Shoemaker's Problem _贪心

    题意:鞋匠现在有n个工作要做,每个工作要x天,没延迟一天需要付款y,鞋匠每天只能做一个工作,问使得鞋匠最少赔款的工作顺序. 思路:工作和工作之间排序,如果a.value*b.day>b.valu ...