C語言裡面,,這段話怎麼理解啊,c語言這句話怎麼理解

2022-03-12 19:15:14 字數 4979 閱讀 8166

1樓:匿名使用者

理解意思就是

int 型佔16位,long佔32位情況下當把一個int型資料賦給一個long型變數時,就要進行符號擴充套件,它會把int型資料的16位原封不動送到long型變數的低16位中,然後再按int型資料的正負,擴充套件符號位,如為正,則long型變數的高16位全部填充為0,為負則全填充為1

把一個long型資料賦給一個int型變數時,系統會將long型資料的低16位原封不動送到整型變數,也就是擷取long型的低16位;

總結為一句就是,不同型別之間轉換的時候,都是按照資料在記憶體中的存放形式傳遞的,佔用短的向佔用長的傳遞時就需要進行符號擴充套件。

2樓:匿名使用者

int型和long型的長度不同,但是不管是int還是long,最高位都是符號位。

當int型向long型賦值時,先不考慮符號位,直接將int的所有位數(排除符號位)複製給long中的相應位置,因為long比int長,所以long中沒有被複制的資料(排除符號位)都用0填充。

最後一步,將int的符號位(即最高為)複製到long的符號位(最高為)。

3樓:僑緯

1、上面話的意思已經表達的很清楚,不理解估計是int型、long型的基本定義理解不夠透徹,建議拿出教科書,再研讀一下c中基本型別的定義,這才是從根本上解決問題;

2、 一般,c語言中:int型佔2個位元組,long型佔4個位元組;一個位元組佔8位;這樣int型就是佔16個位元組,long型佔32個位元組;正數符合用0標識,負數用1標識;將int值賦值給long,相當於將小盒子放到大盒子中,等等....看書吧;

4樓:漠影歌

首先,從你這句話中可以判定,int型別是2位元組的,long型別是4位元組的。也就是說int型別是八位,long型別是16位,系統是16位系統

(這裡不明白可以參考

然後說符號擴充套件的問題。

在這裡,是小的數向大的數擴充套件,long型別: 0000 0000 0000 0000

int型別: 0000 0000

明顯int型別是偏小的數,在數的強制轉換的時候,會將int的這八位放在long型別的後八位上。比如說 int型別是 0000

1001(也就是9),轉換成long型別是0000 0000 0000

1001(算下來也是9),兩者都是整數型別,不過是位數不一樣。正數的轉換不會變它的值,但是佔用的位元組數不一樣而已。

負數: 首先,我們做一個十進位制負數轉換成二進位制的。

計算機中一般用補碼來表示,若對於補碼有不清楚之處請參考

負數轉換為二進位制,就是將其相反數(正數)的補碼的每一位變反(1變0,0變1)最後將變完了的數值加1,就完成了負數的補碼運算。這樣就變成了二進位制。

舉個例子:

將-1變成二進位制。

①首先確定二進位制的位數,假定為16位,即可以表示-32768到32767的所有十進位制整數。

②將-1的相反數,也就是1表示為二進位制0000 0000 0000 0001(十六進位制表示為0x0001)

(由於四位二進位制可以表示為一位十六進位制,故一般將二進位制按四位進行分段表示)

③將這個二進位制變反,可以得到1111 1111 1111 1110(十六進位制hex表示為0xfffe)

④將變反後的數值加上1,得到-1的二進位制表示1111 1111 1111 1111(十六進位制表示0xffff)

其他在16位二進位制可以表示範圍內的負數均可如此進行計算。

這裡需要注意的是:

①二進位制的位數及其可以表示的十進位制數的範圍。

②二進位制數碼變反加一的過程。

所以高位不再補0,而是補1!

不懂繼續追問!

所以高位不再補0,而是補1!

不懂繼續追問!

5樓:

首先你要知道int資料型別的表示方式,00000000 00000000 16bit, 最高位是符號位 也就是題中描述的高16位,為0時表示正,為1時表示負。然後long資料型別是4byte,也就是32bit,然後也是最高位表示符號位。 假設一個變數 int num_x

如果 int num_x 是正數(高16位為0),賦值給long資料型別時 可以直接複製bit0 ~ bit15。例如 int num_x = 10 轉換後 long new_num = 10. 表示為 0 0000000 00001010

如果 int num_x 是負數 (高16位為1),賦值給long資料型別時,符號也要複製過來

如 int num_x = -10,那麼轉換後的long new_num 表示為 1 0000000 00000000 00000000 00001010

6樓:

int型,在記憶體中要佔16位(2個位元組),其中最高位是符號位,0代表正值,1代表負值;long型,在記憶體中要佔32位(4個位元組)。int型轉換為long型—即短資料型別轉換為長資料型別(有符號的),c給出的解決辦法是符號位擴充套件機制,並且要保證擴充套件後的數值大小不變。

例如:10

int型:0000 0000 0000 1001 擴充套件成long型後是:0000 0000 0000 0000 (高16位全為0,因為符號位是0) 0000 0000 0000 1001

例如:-10

int型:1000 0000 0000 1001 擴充套件成long型後是:1111 1111 1111 1111 (高16位全為1,因為符號位是1) 0000 0000 0000 1001

但如果是無符號數的短資料型別轉換為長資料型別,則是進行零擴充套件,即用零來填充長資料型別的高位元組位。

7樓:善護

所謂的整數符號位擴充套件,就是在將整數轉換成位數更多的整數時,將符號位填補在相差的高位上。如將位元組(8 位二進位制數) 00000001 (十進位制 1)、10000000(十進位制 -128)擴充套件成字(16 位二進位制數) 0 0000001 (十進位制 1)將符號位的 0 填充在字(16 位二進位制數)的高 8 位上,即:00000000 00000001 。

10000000(十進位制 -128)將符號位的 1填充在字(16 位二進位制數)的高 8 位上,即:11111111 10000000 。

8樓:匿名使用者

每個型別的儲存方式不同罷了,

c語言這句話怎麼理解

9樓:風若遠去何人留

當參與操作的是常量的時候, 一眼就可以看出型別. 所以很容易計算.

如果是變數的時候, 尤其是區域性變數, 一般定義在附近 也不容易出錯.

全域性變數也不難找到其值.

但函式, 很容易被忽略. 函式返回值型別就是宣告型別.

比如這裡提到的fabs 其宣告格式為 double fabs(double);

所以 fabs(-4)的型別就是double的. 導致表示式型別也就是double的了.

10樓:gta小雞

fabs返回double型,6*double型得到double型數。

關於c語言書中的一段話的理解。

11樓:零一隻小斑點狗

說明:函式有內部函式與外部函式之分,所謂外部是指不包含在函式內的宣告,內部則相反。上面例子是內部宣告(被呼叫之前說明函式時是指先宣告後呼叫,與執行順序有關,一般是從#include到main函式,如果是外部函式則先建立外部函式。

例如先建立int i;才能呼叫i的函式)。

區別:外部可以用於所有函式內,內部只能用於宣告函式內。例如上面例子void printstar();和

void print_message();

只用於main函式內,超出main則不成立(但可以用隱函式宣告),但若外部變數則函式就可以用於任何地方(程式任何地方)如內嵌入void printstar()

好處與缺點:如果呼叫多次出現於不同函式之間時,外部函式比內部方便。如

#include

void printstar();

void print_message();

void main()

void printstar()

void print_message()

這樣函式時

void print_message()和void printstar()都要呼叫print_message()和printstar();這兩個函式因此如果宣告為內部是很麻煩的,外部就是為了解決這個問題。

缺點在於:可能存在修改隱患。內部只能在宣告函式內修改,但外部則到處可以。如果編寫程式是不留意可能會成為隱患,從安全性來說內部比外部高

12樓:

1 void printstar();

void print_message();

是放在main{}之內,屬於「函式說明也可以放在呼叫函式內的說明部分,如在main函式內部進行說明,則只能在main函式內部才能識別該函式。」。

2 printstar(),void print_message()符合在main函式內部進行說明,則只能在main函式內部才能識別該函式。

3 函式宣告放在main{}之前與#include之間的位置,屬於「當在所有函式的外部、被呼叫之前說明函式時,在函式說明的後面所有位置上都可以對該函式進行呼叫。」。因此,main呼叫也符號上面要求。

13樓:小斌

函式說明

1、可以放在呼叫函式內的,如在main函式內部進行說明,則只能在main函式內部才能識別該函式/2、可以放放在呼叫函式之前,只要宣告在使用之前就可以。

函式的定義可以放在其他地方。

實際上就是告訴編譯器,這個呼叫的函式在其他地方定義了,就這麼簡單。

另外,你的程式是對的。沒有問題

我已經執行過了

放在main{}之內如上述所示位置,和放在main{}之外與#include之間的位置,結果都是一樣的。都能正確執行。

c語言初學者,求大神解釋下面這段話,越詳細越好。尤其是那幾個wr語句以及裡面的東西。謝謝

define firstcol 來0x80 第一行 首地址0x80 0xa7 40byte ram,顯示自範圍僅16byte define secondcol 0xc0 第二行首地址0xc0 0xe7 40byte ram,顯示範圍僅16byte define cleanlcd 0x01 清屏,復位...

史鐵生我與地壇裡面這段話的理解,史鐵生的《我與地壇》中的一段話

當一個人的生命即將結束時正是人生的另一種寫照吧 這從作者說他每時每刻都是夕陽也都是旭日可以看出來 後面作者那句 當然,那不是我說的是不是拄著柺杖的自己 反問提出但是,那不是我嗎?指的是小時候的自己 和前面的太陽是夕陽也是旭日是一樣的 宇宙以其不息的慾望將一個歌舞煉為永恆 這句話將歌舞比作人生 也就是...

C語言的指標怎麼用啊,C語言的指標怎麼用啊?

在你提供的 上進行了增加 我感覺你們老師可能是想讓你們把指標用在陣列上吧,對於一個指向陣列的指標p,p 指向陣列的下一個元素。此外,使用指標可以很好的提升 執行效率。有問題可以互相交流。include include int square int a,int b int main for j 0 j...