c語言int和longint問題

2021-04-28 17:13:53 字數 4437 閱讀 4453

1樓:匿名使用者

在c語言中,int即整型型別,long int等同於long,為長整型型別。

二者區別與

內編譯器相容關。

1 16位編譯器。

int佔2位元組,範圍為-32768~32767

long int佔4位元組,範圍為-2147483648~2147483647

2 32位編譯器。

int 和long均佔4位元組,範圍均為-2147483648~2147483647

3 64位編譯器。

int 佔4位元組,範圍為-2147483648~2147483647

long因平台實現不同而不同,有4位元組,6位元組和8位元組三種。可以列印sizeof(long)檢視。

2樓:

int 和long int 語法上 有區別正規寫法:

long int -- 32 位有

符號整型專

short int -- 16 位有符號整型編譯器 允許屬

的 簡略寫法:

long -- 32 位有符號整型

short -- 16 位有符號整型

如果寫成 int, 那麼是不確定 寫法,長度由編譯器自行規定tc int -- 16 位有符號整型, 即 short intms vc++ int -- 32 位有符號整型, 即 long int

輸入語句,long int 用 %ld ,short int 用 %d

編譯器 也許通融 %d 既可讀 long 也可讀 short。

3樓:

vc++6.0 驗證通過。。。不管是long int or int 都能通過編譯,並得到正確結果

4樓:匿名使用者

這個看環境16位環境int和long int乙個16位乙個32位,乙個要用%d乙個要用%ld

而32位環境int和long int %d和%ld是一樣的都是32位

5樓:匿名使用者

用long int定義a b後也是對的啊 我試了

6樓:匿名使用者

試試輸入的時候 改為 scanf("%ld",&b);

c語言 關於int和long型別的範圍

7樓:一騎當後

編譯器不同,寬度是不

相同,分別如下:

16位編譯器:

int: 2個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

32位編譯器:

int: 2個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

64位編譯器:

int: 4個位元組

long: 8個位元組

long long: 8個位元組

unsigned long: 8個位元組

具體範圍,請看下圖:

8樓:文化廚子

在32位系統上int和long的取值範圍如下:

int取值範圍:-2147483648 ~ 2147483647long取值範圍:-2147483648 ~ 2147483647兩者的範圍是一樣的,但是上面範圍是vc6.

0中查到的取值範圍 ,c語言標準庫中limits.h標頭檔案中定義的取值範圍。使用者可以使用limits.

h標頭檔案中的int_min、int_max、long_min、long_max來檢視int或者long型別的取值範圍。

#include

#include

int main()

9樓:**jt笨蛋

^32位機器上 int型別 最小-2^7二進位制補碼10000000,最大2^7-1二進位制01111111

long型別最小-2^15二進位制補碼1000,0000,0000,0000,最大2^15-1二進位制0111,1111,1111,1111

c語言中,怎麼判斷變數的型別?如何判斷乙個變數是int還是long int?(不通過宣告)

10樓:yesyes科

1、首先在duc語言中,long long 是c99標準對整形類zhi型做的擴充套件,dao每個long long型別的變數佔8位元組版,64位。如下圖使用%lld輸出。權

2、這種輸出方法的結果如下圖所示,可以看到輸出結果是0,而很明顯輸出的結果不應該為零,也就是說輸出結果是錯誤的。

3、這時要看下是不是函式有問題,採取的方法如下圖所示。

4、修正之後的輸入結果下圖所示,通過這個過程,得出的結論是輸出long long型別的資料應該使用prinf的%lld格式,注意輸出函式不要寫錯。

5、最後輸出bool型別的資料,其使用printf的輸出格式如下圖所示。

6、最後輸出結果如下圖所示,就完成了。

11樓:匿名使用者

標準c裡是沒有方法獲得乙個變數的型別的,在gcc擴充套件c中有typeof可以使用,在linux的很多地方都用到了typeof,和sizeof類似。

12樓:煭鯖

雖然用這個sizeof()函式復

可以通過字節制數判斷!

bai但是你說int 和 long int這裡就會出du現問題!應zhi為int 和long int 都是4個位元組dao

!還有float!只能說sizeof()可以區分字元和數字。至於要去區別long int 和int 有點難!不必糾結這個吧...

13樓:輿影

可以用單目運算子sizeof(變數名)進行判斷,16位機下int是2位元組,32位機下是4位元組,long int是8位元組

14樓:匿名使用者

用typeid的成員函式解決

15樓:金色潛鳥

c++ 裡有。c 我沒

試過。版

調 typeid()。 頭文權件#include#include

#include

using namespace std;

main()

16樓:夕心木

同上,使用sizeof()函式判斷

c語言long long(int64)和int(int32)之間如何安全的互相轉換? 50

17樓:慕裕沐馳鴻

用lld吧

定義的時候有可能需要引入一些包含了typedef的標頭檔案,比如__int64

long

long

int不用,是基本型別,不是typedef定義型別。

18樓:匿名使用者

int aa = (int32)((((long)4294917296) << 32)>>32);

c# 這麼寫的,

c語言應該也可以

19樓:匿名使用者

c語言long long(int64)和int(int32)之間如何安全的互相轉換要看具體情況。

細節如下:

int32賦值給int64,因為int64的表示範圍更大,此時直接賦值,一定安全;

int64賦值給int32,如果int64中的資料值不超過int32的表示範圍,沒問題,如果超出範圍就會溢位,不能安全轉換。

20樓:匿名使用者

1、64位的int轉換int32不能單純的用c的強制型別轉換那麼簡單,要用演算法做到的,說白了就是精度降低。這個已經不是轉換那麼簡單了。舉個例子吧,32位的真彩色**,轉變為16位的彩色**,原理是一樣的,精度轉換降低。

2、比如64位int變成32位int,應該是64位int數值每兩個位對應32位int數值的乙個位對吧,兩個位的值最大為3,所以應該這麼做,64位的int數值位0 和位1 如果》=2的話,那麼32位int的數值的位0設定為1, 如果<2,則32位int數值的位0設定為0, 一次類推64位int資料的位2和位3,對應32位int數值的位1。

21樓:

用if判斷每種不同的情況就行了,然後取模就行了

22樓:**座

呵呵,我告訴你啊 64位的int轉換int32不能單純的用c的強制型別轉換那麼簡單,要用演算法做到的,說白了就是精度降低。這個已經不是轉換那麼簡單了。舉個例子吧,32位的真彩色**,轉變為16位的彩色**,原理是一樣的,精度轉換降低。

比如64位int變成32位int,應該是64位int數值每兩個位對應32位int數值的乙個位對吧,兩個位的值最大為3,所以應該這麼做,64位的int數值位0 和位1 如果》=2的話,那麼32位int的數值的位0設定為1, 如果<2,則32位int數值的位0設定為0, 一次類推64位int資料的位2和位3,對應32位int數值的位1.。。。。等等,明白了 這就是降低精度的演算法。

c語言弱弱問一下int型別的字佔位元組那題

d 4,8 a 整型,4位元組。b double 型,8 位元組。a 3 不可以版,改 a 3 就可以了權 int 型占有 4個位元組 size a 等於4 double 型占有8位元組 size b 等於8 int x 3 是可以通過編譯的,應該是你程式書寫有問題吧 c語言強制型別轉換問題 強制型...

c語言中int什麼意思以及什麼是無符號和有符號整型

有符號就是有 符號 可以表示負數,也可以表示正數 無符號就是沒有 符號 全部表示正數 只能表示正數 int就是正數的意思12 3 1 21這些 通俗說就是不含小數的數 顧名思義 就是無符號的意思 即是說在取值時 取正值 例如 int 型別可以去正負值 但如果你定義了 unsigned int則只能取...

c語言中u8,u16,u32和int區別

這幾種方式都是在表達同1個意思,沒有區別。typedef unsigned char uint8 t typedef unsigned short int uint16 t typedef unsigned int uint32 t typedef unsigned int64 uint64 t 示...