欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

long int

long int即long,給人的感覺(jué)好像是長(zhǎng)整型,但實(shí)際上,它和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.

在實(shí)際的使用中,long與int幾乎沒(méi)有區(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個(gè)字節(jié),int占用2個(gè)字節(jié),long int是名副其實(shí)的長(zhǎng)整型

在ANSI C的標(biāo)準(zhǔn)中,對(duì)長(zhǎng)整型的定義也是long int應(yīng)該至少和int一樣長(zhǎng),而不是long int 一定要比int占用存儲(chǔ)字節(jié)長(zhǎng)。

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

新版的C/C++標(biāo)準(zhǔn)兼容了早期的這一設(shè)定。

long long

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

C++11官方正式標(biāo)準(zhǔn)如下——

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

long long占用8個(gè)字節(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++的正式標(biāo)準(zhǔn),這也就意味著,該類型不會(huì)因?yàn)榫幾g器或者開(kāi)發(fā)平臺(tái)的不同而有所差異,放之四海而皆準(zhǔn),而且與一些系統(tǒng)函數(shù)、類庫(kù)都有很好的交互(如常見(jiàn)的printf、scanf、cin和cout等)。

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

__int64

在早期的代碼中,可能會(huì)遇到__int64這種類型,這應(yīng)該算是“歷史遺留”問(wèn)題。

早期的C/C++標(biāo)準(zhǔn)中并沒(méi)有規(guī)定64位長(zhǎng)整型的規(guī)范,因此不同的編譯器對(duì)這一模糊概念有不同的定義,我們熟知的VC6.0采用了__int64這種類型來(lái)表示64位長(zhǎng)整型——

#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的編譯器的話,打開(kāi)__int64的定義會(huì)發(fā)現(xiàn)——

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

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

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

總結(jié)

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

類型存儲(chǔ)字節(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

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

相關(guān)文章

  • C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法(路徑規(guī)劃算法)

    C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法(路徑規(guī)劃算法)

    這篇文章主要介紹了C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法,RRT算法整體框架主要分為rand、near、new三點(diǎn)的建立和near與new之間的安全性檢查,需要的朋友可以參考下
    2022-05-05
  • C++無(wú)符號(hào)整數(shù)溢出問(wèn)題解析

    C++無(wú)符號(hào)整數(shù)溢出問(wèn)題解析

    這篇文章主要介紹了C++無(wú)符號(hào)整數(shù)溢出探究,本文主要探討C/C++中無(wú)符號(hào)整數(shù)超過(guò)范圍后的計(jì)算問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷源碼

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷源碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C++虛函數(shù)及虛函數(shù)表簡(jiǎn)析

    C++虛函數(shù)及虛函數(shù)表簡(jiǎn)析

    這篇文章主要介紹了C++虛函數(shù)及虛函數(shù)表,內(nèi)容非常詳細(xì),思路清晰,需要的朋友可以參考下
    2015-08-08
  • C語(yǔ)言實(shí)現(xiàn)十六進(jìn)制與二進(jìn)制的相互轉(zhuǎn)換

    C語(yǔ)言實(shí)現(xiàn)十六進(jìn)制與二進(jìn)制的相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何利用c語(yǔ)言實(shí)現(xiàn)將文件中十六進(jìn)制數(shù)據(jù)與二進(jìn)制數(shù)據(jù)相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod詳解

    C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言浮點(diǎn)函數(shù)中的modf和fmod,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++高性能服務(wù)器框架之協(xié)程調(diào)度模塊

    C++高性能服務(wù)器框架之協(xié)程調(diào)度模塊

    這篇文章主要介紹了C++高性能服務(wù)器框架中的協(xié)程調(diào)度模塊,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • C++中std::find函數(shù)介紹和使用場(chǎng)景

    C++中std::find函數(shù)介紹和使用場(chǎng)景

    std::find函數(shù)是一個(gè)非常實(shí)用的通用查找算法,適用于各種場(chǎng)景,本文主要介紹了C++中std::find函數(shù)介紹和使用場(chǎng)景,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C++模板template用法小結(jié)(推薦)

    C++模板template用法小結(jié)(推薦)

    這篇文章主要介紹了C++模板template用法總結(jié) ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解C++11中的類型推斷

    詳解C++11中的類型推斷

    C++11中為了更好的支持泛型編程,提供了?auto和decltype兩個(gè)關(guān)鍵詞,目的就是提供編譯階段的自動(dòng)類型推導(dǎo),這篇文章主要介紹了C++11中的類型推斷,需要的朋友可以參考下
    2023-01-01

最新評(píng)論