int是幾位;short是幾位;long是幾位 負數怎么表示


其實可以直接通過stm32的仿真看到結果:(這里是我用keil進行的測試,不知道這種方法是否准確)

 

從上面看, char是8位  short是4*4=16位  int是8*4=32位  long是8*4=32位 

這里關於 long還是有點不清楚,不是道是不是64位,有的人說是64位(起碼在stm32中,long是32位的不是64位的),

 

 

int 范圍 -2^31——2^31-1,即-2147483648——2147483647  也就是10位數.

 

 

為了驗證long是多少位,然后進行了程序運行:

 

 通過上面程序輸出來:

 

 從上面結果來看,long真的是4*8=32位的.

如果設置: long long類型呢:

 

 

 可以看到long long是正確的所以long long 應該是64位的

 

 

 

 

這個和編譯器有關,

在stm32的keil中:

char 就是字節,占8位

short 就是 short int 占2個字節  2*8=16位

int 占4個字節 4*8 =32位

long 就是 long int 占8個字節  4*8=32位

 

正數的補碼是它本身,

負數的補碼是它本身的值每位求反,最后再加一.

如: -3

那么就要先看3,3的十六進制是0x0003

0x0003求反之后0xfffc

然后加一 0xfffc加一 為0xfffd

所以-3 表示為0xfffd

計算機中存儲-3都是以補碼形式存在的. 即存的是0xfffd

 

 

 

原碼是給人看的

補碼是計算機存儲的

反碼是中間產物

正數的補碼等於原碼.

負數的補碼等於原碼除去最高位,取反,加1

 

 

 

 

 

計算機為什么要用補碼表示負數,

答案是為了方便計算

參看:https://www.cnblogs.com/starry-skys/p/11997091.html

https://www.cnblogs.com/starry-skys/p/11991906.html

 

 

 

 

 

 

 

 

 

 

https://blog.csdn.net/super_demo/article/details/50117449

 

 

這里比較詳細:

http://news.eeworld.com.cn/mcu/ic459073.html

       

 

 

%dn

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM