在c語言中,int和long在記憶體上是如何轉換的?比如 1在

2021-03-23 03:02:51 字數 5636 閱讀 6723

1樓:好小愛新

這個屬於組合語言或是機器**的範疇了,對於有符號數,組合語言有專門的語句進行「位擴充套件」運算,只要資料進行了此操作,便自動擴充套件它的符號位了。

c語言int的取值範圍

2樓:天雲一號

c語言中int的取值範圍為:-2147483648 ~ 2147483647

解釋如下:

int型別在c語言中佔4個位元組,即32個二進位制位。

當表示正數時,最高位為符號位(符號位為0),最大的正數是 0111 1111 1111 1111 1111 1111 1111 1111 即2^31 -1 = 2147483647

當表示負數時,最高位為符號位(符號位為1),最小的負數是 1000 0000 0000 0000 0000 0000 0000 0000 而在計算機中是以補碼的形式儲存的,c語言規定 1000 0000 0000 0000 0000 0000 0000 0000 的補碼為-2147483648

所以c語言中int的取值範圍為:-2147483648 ~ 2147483647

3樓:枕邊吹風會

c語言int的取值範圍在32/64位系統中都是32位,範圍為-2147483648~+2147483647,無符號情況下表示為0~4294967295。

c/c++程式語言中,int表示整型變數,是一種資料型別,用於定義乙個整型變數,在不同編譯環境有不同的大小,不同編譯執行環境大小不同。

c的資料型別包括:整型、字元型、實型或浮點型(單精度和雙精度)、列舉型別、陣列型別、結構體型別、共用體型別、指標型別和空型別。

基本資料型別:

void:宣告函式無返回值或無引數,宣告無型別指標,顯示丟棄運算結果。(c89標準新增)

char:字元型型別資料,屬於整型資料的一種。(k&r時期引入)

int:整型資料,表示範圍通常為編譯器指定的記憶體位元組長。(k&r時期引入)

float:單精度浮點型資料,屬於浮點資料的一種。(k&r時期引入)

double:雙精度浮點型資料,屬於浮點資料的一種。(k&r時期引入)

_bool:布林型(c99標準新增)

_***plex:複數的基本型別(c99標準新增)

_imaginary:虛數,與複數基本型別相似,沒有實部的純虛數(c99標準新增)

_generic:提供過載的介面入口(c11標準新增)

4樓:匿名使用者

二進位製數在計算機內儲存的是其補碼

對於有符號數,正數的補碼和本身一樣,負數的補碼是本身的數字位取反後加1

比如:1=(0001)補=(0001)

-1=(1001)補=(1111)

計算機儲存-1就是儲存的1111

因此當int表示範圍為16位時,可以表示的最大負數為:

10000...0000(後面有15個0)相當於-0

但這其實是-32768=110000...0000(第一位符號位,後面有15個0)的補碼表示

可以理解為16位的int足可以表示-32768的補碼

5樓:匿名使用者

正數範圍是0000 0000 0000 0001到0111 1111 1111 1111應該都理解。

負數範圍要了解計算機內部表示負數的方法,「2的補碼」,具體方法分兩步:

第一步,每乙個二進位制位都取相反值,0變成1,1變成0。

第二步,將上一步得到的值加1。

比如要表示16位的-1,就把+1也就是0000 0000 0000 0001取反變為1111 1111 1111 1110,再+1,所以1111 1111 1111 1111表示-1。

那麼要知道計算機表示的乙個負數的絕對值就要把這個負數按照上面所說的「2的補碼」規則反處理。所以16位能表示的最小負數,也就是符號位為1,其餘全部為0,即1000 0000 0000 0000。

(這裡比較難理解為什麼確定符號為1,後面要全部取0,主要是為了經過反處理後得到乙個盡量大的數值,也就是最左邊位置2^15位上的值為1,這樣才能得到最小的負數。)

第一步,1000 0000 0000 0000(處理時,這是乙個二進位制數值,1不再是符號) 減去1得到 0111 1111 1111 1111。

第二步,取反,變為1000 0000 0000 0000,即1*2^15,32768。

所以最小是1000 0000 0000 0000,-32768。

6樓:匿名使用者

負數是用補碼儲存的,所以1111 1111 1111 1111 按十六位有符號整數轉換為十進位制數字就是-1,是最大的負整數。

-32768的轉換過程是:

先將32768(-32768的絕對值)按位取反,結果就是0111 1111 1111 1111

之後再將取反後的結果加1,就得了-32768的二進位制儲存:1000 0000 0000 0000

請自行查詢 補碼 的相關知識仔細研讀吧!

7樓:匿名使用者

在寫程式的時候最好用c庫定義好的巨集或函式,因為int的範圍因機器而異。為了避免在程式中直接寫死最大值。

c庫會用條件編譯根據你的機器選擇正確的最大值。

這個**包括各種型別的最大值

如果是c++的話看這個:

#include

#include

using namespace std;

int main(int,char**)

8樓:匿名使用者

1000 0000 0000 0000不是-0是-1所以1000 0000 0000 0001是-2而0000 0000 0000 0001是1明白了?

請問為什麼-65537在16位的記憶體中的值與-1在記憶體中的值是一樣的?(程式設計c語言)

9樓:匿名使用者

這主要是-65537這個數超出了16記憶體單元表示數的範圍,所以實際儲存的值(-1)與要表示的值(-65537)不同,但-65537並沒有超出32記憶體單元表示數的範圍,所以實際儲存的值就是其本身。

10樓:匿名使用者

16位有符號整數的賦值, 超出取值範圍後會取模操作( n%32768) 。65537%32768=1 ,所以

-65537 == -1

在c語言中,int型別,long型別,float型別,double型別和char型別在16位和32位計算機中各佔幾個位元組?

11樓:12345額時代

int 在記憶體中佔4個位元組,

long在記憶體中佔4個位元組,float:佔4個位元組,double: 佔8個位元組,char:佔1個位元組,操作方法如下:

1、c#支援8中預定的整數型別。分別是sbyte、short、int、long、byte、ushort、uint、ulong。byte0-255標準的8位整數型別。

預設是無符號的,有符號的為sbyte。

2、c#的浮點型別有兩種,分別是float(32為單精度浮點數)、double(64位雙精度浮點數)。float型別用於較小的浮點值。double型別比float型別大,提供的精度也大一倍。

3、decimal型別表示更高精度的浮點數。decimal型別常用於財務計算。可以用字母m來區分。如下:decimal  d=1.2m。

4、c#bool型別包含布林值true或false。布林值和整數值不能相互隱式轉換。如果變數宣告為布林值時,就只能用true或false,不能用0或1表示,否則會報錯。

5、c#支援插char型別,用來儲存單個字元。char型別的字面量是單引號括起來的。如 『a』如果字元放在單引號中,編譯器就會把它識別為string型別,變成引用型別。

12樓:小破孩之父

int型別,long型別,float型別,double型別和char型別

16位 2 4 4 4 1

32位 4 4 4 8 1

其實我覺得和編譯器也有關係

13樓:匿名使用者

這個和編譯器有關係

在32位下面,tc的int也是2位的,而vc等多數編譯器是4位

在vc下,int 4 long 4 float 4 double 8

14樓:手機使用者

其實根據具體機器和編譯器有所不同,你用sizeof()這個函式看吧

15樓:通安易速璧

樓上正解。ansic標準裡是沒有規定佔多少位元組的,準確地說與你的計算機cpu位數和作業系統位數無關,型別大小是由編譯器廠商***piled時定義的,具體你可以在你編譯器sizeof看一下。

16樓:伍初陽菅英

不同的編譯器所規定的位元組數有所差異,可以用函式sizeof()進行

測試,例如想測試int型別佔多少位元組結果就是int型別所佔的位元組數!

在c語言中各種資料型別各佔多少位

17樓:物理公司的

^(一)32位平台:

分為有符號型與無符號型。

有符號型:

short 在記憶體中佔兩個位元組,範圍為-2^15~(2^15-1)

int 在記憶體中佔四個位元組,範圍為-2^31~(2^31-1)

long在記憶體中佔四個位元組,範圍為-2^31~2^31-1

無符號型:最高位不表示符號位

unsigned short 在記憶體中佔兩個位元組,範圍為0~2^16-1

unsigned int 在記憶體中佔四個位元組,範圍為0~2^32-1

unsigned long在記憶體中佔四個位元組,範圍為0~2^32-1

實型變數:

分單精度 float 和雙精度 double 兩種形式:

float:佔四個位元組,提供7~8位有效數字。

double: 佔八個位元組,提供15~16位有效數字。

(二)16位平台:

1)整型(基本型):型別說明符為int,在記憶體中佔2個位元組。

2)短整型:型別說明符為short int或short。所佔位元組和取值範圍均與整型(基本型)相同。

3)長整型:型別說明符為long int或long,在記憶體中佔4個位元組。

無符號型:型別說明符為unsigned。

無符號型又可與上述三種型別匹配而構成:

各種無符號型別量所佔的記憶體空間位元組數與相應的有符號型別量相同。但由於省去了符號位,故不能表示負數。

實型變數:

分為單精度(float型)、雙精度(double型)和長雙精度(long double型)三類。

單精度型佔4個位元組(32位)記憶體空間,其數值範圍為3.4e-38~3.4e+38,只能提供七位有效數字。

雙精度型佔8 個位元組(64位)記憶體空間,其數值範圍為1.7e-308~1.7e+308,可提供16位有效數字。

長雙精度型16 個位元組(128位)記憶體空間,可提供18-19位有效數字。

c語言中abaintabb那麼這個int是

你好!int 是取整函式啊,無論你小數點有幾位,它取的就不帶小數點,就是整數,明白了嗎?比如 int 1 2.2 1 int 1 2.4 1int 2.2 1 3 int 2.4 1 3這樣的例子能看清楚嗎,希望能給你解決問題!這個int 是個強制型別轉化。a b的結果可能是個帶小數點的數,int ...

C語言中double和int型的資料之間可相互賦值

可以。如 double a 1.2 int b b a b 1 取整了 int a 1 double b b a b 1.00000 1 double 雙精度浮點型 是計算機使用的一種資料型別。比起單精度浮點數 float double 雙精度浮點數 使用 64 位 8位元組 來儲存乙個浮點數。2 ...

在C語言中,怎麼判斷變數是int型的還是char型的

變數是int型的還是char型,是由宣告決定的。函式呼叫時引數型別錯,你編譯時就通不過呀。unsigned char 可以當無符號整型用。假設函式形式為 int function int n 方法1 判斷實參字長 int function int n 在c語言裡有個函式可以判斷輸入的是不是數字或者字...