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. MySql高效分页SQL

    public string GetQuerySql(ITSPAreaQueryModel model, object state = null) { ); sqlBuilder.AppendForma ...

  2. [?]Unity快捷键

    Super=Win键. Rererence: What are Unity's keyboard and mouse shortcuts?

  3. golang make the first character in a string lowercase/uppercase

    import ( "unicode" ) func UcFirst(str string) string { for i, v := range str { return stri ...

  4. MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法

    MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法: 1.备份my.ini 2.在my.ini字段里 [mysqld] #socket=mysql skip-grant-tables ...

  5. Windows 7下 搭建 基于 ssh 的sftp 服务器

    Windows  xp 下 搭建 基于  ssh 的sftp 服务器,服务器端可以用 freesshd,F-secure server等,filezilla server不可用,之前傻乎乎的用file ...

  6. Github android客户端源代码分析之一:环境搭建

    1.下载相应的包及项目,参考https://github.com/github/android/wiki/Building-From-Eclipse. 2.若需查看某些包的源文件或者javadoc,则 ...

  7. jQuery + css 公告从左往右滚动

    $(function() { // 公告滚动 $(".notice-content").textScroll(); }); /** * 从右往左滚动文字 * @returns {u ...

  8. TensorFlow 深度学习笔记 从线性分类器到深度神经网络

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 L ...

  9. javascript总结--2014-04-17

    HTML DOM Function Data http://www.oschina.net/translate/learning-javascript-design-patterns?cmp& ...

  10. haproxy hdr和path

    path : string This extracts the request's URL path, which starts at the first slash and ends before ...