最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++之long int與long long的區(qū)別及說明

 更新時間:2023年08月07日 09:52:36   作者:大山喵  
這篇文章主要介紹了C/C++之long int與long long的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

long int

long int即long,給人的感覺好像是長整型,但實際上,它和int一樣,只有32位。

cppreference給出的定義是——

int - basic integer type. The keyword int may be omitted if any of the modifiers listed below are used. If no length modifiers are present, it’s guaranteed to have a width of at least 16 bits. However, on 32/64 bit systems it is almost exclusively guaranteed to have width of at least 32 bits.

long - target type will have width of at least 32 bits.

在實際的使用中,long與int幾乎沒有區(qū)別,比如——

#include<stdio.h>
int main(){
	long l = 10000000;
	int i = 10000000;
	printf("size of long:%d\n",sizeof(long));
	printf("size of int:%d\n",sizeof(int));
 	printf("l = %d\n",l);
 	printf("i = %d\n",i);
	return 0;
}

既然long int與int相同,那么為什么還有l(wèi)ong int這種尷尬的類型呢?  

原因是早期的C編譯器定義了long int占用4個字節(jié),int占用2個字節(jié),long int是名副其實的長整型。

在ANSI C的標準中,對長整型的定義也是long int應該至少和int一樣長,而不是long int 一定要比int占用存儲字節(jié)長。

所以,正確的關(guān)系應該是——

新版的C/C++標準兼容了早期的這一設定。

long long

long long則不同,long long是C++的64位整型的基本類型,“現(xiàn)任”長整型,從C99開始引入這個概念,在后續(xù)的標準中完善概念和定義,

C++11官方正式標準如下——

long long - target type will have width of at least 64 bits.(since C++11)

long long占用8個字節(jié),數(shù)據(jù)表示范圍也從

#include<stdio.h>
int main(){
	long l = 10000000;
	int i = 10000000;
	long long ll = 100000000000000;
	printf("size of long:%d\n",sizeof(long));
	printf("size of int:%d\n",sizeof(int));
	printf("size of long long:%d\n",sizeof(long long));
 	printf("l = %d\n",l);
 	printf("i = %d\n",i);
 	printf("ll = %lld\n",ll);
	return 0;
}

long long是C++的正式標準,這也就意味著,該類型不會因為編譯器或者開發(fā)平臺的不同而有所差異,放之四海而皆準,而且與一些系統(tǒng)函數(shù)、類庫都有很好的交互(如常見的printf、scanf、cin和cout等)。

與之相反,出身MS的__int64就有點不受待見了,在不同的編譯器上可能水土不服。

__int64

在早期的代碼中,可能會遇到__int64這種類型,這應該算是“歷史遺留”問題。

早期的C/C++標準中并沒有規(guī)定64位長整型的規(guī)范,因此不同的編譯器對這一模糊概念有不同的定義,我們熟知的VC6.0采用了__int64這種類型來表示64位長整型——

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	__int64 i64 = -pow(2,63);
	cout<<"__int64:"<<sizeof(__int64)<<endl; 
	cout<<"i64 = "<<i64<<endl;
	return 0;
}

與long long具有相同的效果,但是,__int64并不是正式規(guī)范,比如,如果你使用的是MinGW的編譯器的話,打開__int64的定義會發(fā)現(xiàn)——

VS 2017雖然把__int64作為了一種內(nèi)置類型,但是也做了類似的處理,使得__int64與long long沒有肉眼可見的差別。

但如果你使用的開發(fā)環(huán)境比較早期,那么可能就要專門研究一下__int64了。

比如說,古老的VC6.0并沒有l(wèi)ong long這種類型,而__int64的輸入輸出,又需要printf和%I64d的配合,而不是%lld或者直接用cout。

總結(jié)

C/C++與Java等語言不同,具有較高的自由度,由于某些歷史原因,某些概念在不同的平臺上有不同的解釋,雖然現(xiàn)在新版本的C++標準和編譯器都在做兼容性工作,你可以在__int64與long long之間無縫切換,但至少,我們要清楚兩者的不同。

類型存儲字節(jié)表示范圍
int4-2147483648~2147483647
short int2-32768~+32767
long4-2147483648~2147483647(二十億,約 1 0 10 10^{10} 1010)
long long89223372036854775808~+9223372036854775807(九百億億,約 1 0 19 10^{19} 1019)
__int6489223372036854775808~+9223372036854775807

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ Boost Array與Unordered使用介紹

    C++ Boost Array與Unordered使用介紹

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C語言中結(jié)構(gòu)體的內(nèi)存對齊規(guī)則講解

    C語言中結(jié)構(gòu)體的內(nèi)存對齊規(guī)則講解

    C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對齊
    2022-05-05
  • C++最短路徑Dijkstra算法的分析與具體實現(xiàn)詳解

    C++最短路徑Dijkstra算法的分析與具體實現(xiàn)詳解

    經(jīng)典的求解最短路徑算法有這么幾種:廣度優(yōu)先算法、Dijkstra算法、Floyd算法。本文是對?Dijkstra算法的總結(jié),該算法適用于帶權(quán)有向圖,可求出起始頂點到其他任意頂點的最小代價以及對應路徑,希望對大家有所幫助
    2023-03-03
  • QT利用QPainter繪制三維餅狀圖

    QT利用QPainter繪制三維餅狀圖

    這篇文章主要為大家詳細介紹了如何利用QPainter實現(xiàn)三維餅狀圖的繪制,由于Qt中沒有三維餅狀圖的繪制組件,因此只能自行繪制,感興趣的可以動手嘗試一下
    2022-06-06
  • C語言數(shù)據(jù)結(jié)構(gòu)算法之實現(xiàn)快速傅立葉變換

    C語言數(shù)據(jù)結(jié)構(gòu)算法之實現(xiàn)快速傅立葉變換

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)算法之實現(xiàn)快速傅立葉變換的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Qt spdlog日志模塊的使用詳解

    Qt spdlog日志模塊的使用詳解

    在Qt應用程序開發(fā)中,良好的日志系統(tǒng)至關(guān)重要,本文將介紹如何使用spdlog 1.5.0創(chuàng)建滿足以下要求的日志系統(tǒng),感興趣的朋友一起看看吧
    2025-04-04
  • C語言、C++中的union用法總結(jié)

    C語言、C++中的union用法總結(jié)

    這篇文章主要介紹了C語言、C++中的union用法總結(jié),本文講解了什么是union、C中使用union、當union遇到對象等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • 使用C語言實現(xiàn)vector動態(tài)數(shù)組的實例分享

    使用C語言實現(xiàn)vector動態(tài)數(shù)組的實例分享

    vector是指能夠存放任意類型的動態(tài)數(shù)組,而C語言中并沒有面向?qū)ο蟮腃++那樣內(nèi)置vector類,所以我們接下來就來看一下使用C語言實現(xiàn)vector動態(tài)數(shù)組的實例,需要的朋友可以參考下
    2016-05-05
  • Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實例

    Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實例

    這篇文章主要介紹了Cocos2d-x UI開發(fā)之CCControlSwitch控件類使用實例,本文代碼中含大量注釋講解了CCControlSwitch控件類的使用,需要的朋友可以參考下
    2014-09-09
  • C++?Boost?Foreach超詳細分析講解

    C++?Boost?Foreach超詳細分析講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11

最新評論

益阳市| 大宁县| 施秉县| 诸城市| 都江堰市| 普兰店市| 文成县| 临沭县| 吉安市| 昌乐县| 江山市| 枣庄市| 盖州市| 岫岩| 左云县| 鲜城| 澄江县| 柘城县| 金门县| 五家渠市| 交城县| 嵩明县| 漳平市| 滦平县| 岑溪市| 营口市| 阳春市| 庆元县| 荔波县| 象山县| 高台县| 靖江市| 北流市| 阿克苏市| 晋江市| 三门县| 隆昌县| 曲周县| 邹城市| 安多县| 吉木萨尔县|