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. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  2. hadoop压缩配置

    为何要使用压缩,压缩可以是文件的大小减小很多,节省空间:另外压缩后的文件在传输时更节省带宽. 所需软件: 1)lzo 2)hadoop-lzo 3)maven 安装编译: 1)lzo wget htt ...

  3. HDU 4798 - Skycity

    告诉你一幢楼的高度,楼的层数,每层一样高. 每一层的底边是一个圆,下一层的玻璃一定要包括进上一层的底边. 每层玻璃铺成棱柱形,玻璃有最小面积限制. 问你这层楼最小的总玻璃数是多少. 求出每层最小的玻璃 ...

  4. Mysql优化之创建高性能索引(一)

    1.索引基础 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.但是不恰当的索引随着数据量的增加,也会使整个数据库的性能下降. 举个例子: ; 如果在id上建立索引 ...

  5. 用JavaScript将Canvas内容转化成图片的方法

    上周我们花了半天时间开发下一个准备放进Mozilla Marketplace的应用.有一个应用现在非常的火热,那就是Instagram,Facebook花了100万美元收购了它.我们也想有100万美元 ...

  6. BottomSheetBehavior 之 java.lang.IllegalArgumentException: The view is not associated with BottomSheetBehavior

    AndroidRuntime: FATAL EXCEPTION: main Process: me.chunsheng.uberdriver, PID: 13674 java.lang.Runtime ...

  7. 手机触摸屏的JS事件

    处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: touchstart: // 手指放到屏幕上的时候触发 touchmove: // 手指在屏幕上移动的时候触发 ...

  8. View的工作原理(二)——layout

    1.当View的measure被确定后,会调用ViewGroup的layout方法,之后使用onLayout方法(同样也是系统未自动重写,要我们自己完成)遍历子View(根Measure的形式是一样得 ...

  9. CENTOS 挂载硬盘

    查看物理卷:pvs 查看卷组:vgs 列出分区:lvs 查看磁盘:ll /dev/disk/by-path/ 扫描 LVM 找到 VG vgscan centos 下 mount: unknown f ...

  10. python虚拟环境Virtualenvwrapper无法升降级虚拟环境软件解决方法

    virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够在没有权限的情况下安装新套件,不同应用可以使用不同的套件版本,套件升级不影响其他应用. Virtaulen ...