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 示...