int a和 int a的區別

2021-06-19 19:49:30 字數 1287 閱讀 1392

先從一到面試題說起:

#includeusing namespace std;

int main()

輸出結果為: 0

0 -5

66在上面已經知道float型125.5在記憶體中存放方式為:

00000000   低位址

00000000

11111011

01000010   高位址

因此對於p和p+1指向的單元,其中儲存的二進位制數表示的十進位制整數為0;

而對於p+2指向的單元,由於為char型指標,為帶符號的資料型別,因此11111011,符號位為1,則為負數,由於在記憶體中二進位制是以補碼儲存的,所以其真值為-5.對於p+3指向的單元,01000010,為正數,則其大小為66。上面程式輸出結果驗證了其正確性。

3. 關於原碼、補碼、反碼和移碼(增碼)

原碼:

如果機器字長為n,那麼乙個數的原碼就是用乙個n位的二進位制數,其中最高位為符號位:正數為0,負數為1。剩下的n-1位表示概數的絕對值。

例如: x=+101011 , [x]原= 00101011    x=-101011 , [x]原= 10101011 

位數不夠的用0補全。

ps:正數的原、反、補碼都一樣:0的原碼跟反碼都有兩個,因為這裡0被分為+0和-0。

反碼:

知道了什麼是原碼,那麼你只需要具備區分0跟1的能力就可以輕鬆求出反碼,為什麼呢?因為反碼就是在原碼的基礎上,符號位不變其他位按位取反(就是0變1,1變0)就可以了。

例如:x=-101011 , [x]原= 10101011 ,[x]反=11010100

補碼:

補碼也非常的簡單就是在反碼的基礎上按照正常的加法運算加1。

例如:x=-101011 , [x]原= 10101011 ,[x]反=11010100,[x]補=11010101

ps:0的補碼是唯一的,如果機器字長為8那麼[0]補=00000000。

移碼:

移碼也叫增碼,移碼最簡單了,不管正負數,只要將其補碼的符號位取反即可。

例如:x=-101011 , [x]原= 10101011 ,[x]反=11010100,[x]補=11010101,[x]移=01010101

int a和 int a的區別

cpp view plain copy include include include using namespace std intmain int a static cast a int a reinterpret cast a int a 不經過轉換,直接得到a在記憶體單元的值,並將其轉換成整...

int a和 int a的區別

float a 1.0f cout int a endl cout int a endl cout boolalpha int a int a endl 1 輸出什麼?float b 0.0f cout int b endl cout int b endl cout boolalpha int b ...

int a和 int a的區別

float a 1.0f cout int a endl cout int a endl cout boolalpha int a int a endl 1 輸出什麼?float b 0.0f cout int b endl cout int b endl cout boolalpha int b ...