C语言进制转换时自动扩展位?(原码、反码、补码)(打印%o、%x时会自动扩展到32位【负数先得到其十进制真实数值,再根据其真实数值得到八进制、十进制补码】)
生活随笔
收集整理的這篇文章主要介紹了
C语言进制转换时自动扩展位?(原码、反码、补码)(打印%o、%x时会自动扩展到32位【负数先得到其十进制真实数值,再根据其真实数值得到八进制、十进制补码】)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 解析(char a = 0x81)
- 注意
- 解析(int b = 0x81)
- 解析(char c = -12)
懵逼😵
解析(char a = 0x81)
(打印8進制補碼的時候,是通過a的十六進制補碼,換算成十進制原碼【-127】后,再倒推回去計算8進制補碼,而不是通過十六進制補碼直接得到的!)
char a 的十六進制補碼:8 1 1000 0001(最高位是1,說明是負數) 八進制補碼: 1111 1111 1111 1111 1111 1111 1000 0001(八進制補碼)--> 11 111 111 111 111 111 111 111 110 000 001(37777777601) 反碼: 1000 0000 (1111 1111 1111 1111 1111 1111 1000 0000 倒回去↑) 原碼: 1111 1111 (1000 0000 0000 0000 0000 0000 0111 1111 倒回去↑) 原碼十進制表示: -127 (倒回去↑)注意
正數的原碼補碼反碼相同
打印%o,八進制,估計也是以4個字節,32位大小打印
解析(int b = 0x81)
int b 的十六進制補碼:8 1 0000 0000 0000 0000 0000 0000 1000 0001八進制補碼(由十六進制補碼直接轉換): 0000 0000 0000 0000 0000 0000 1000 0001 00 000 000 000 000 000 000 000 010 000 0012 0 1十進制原碼(因為最高位為0,是正數,所以原碼等于補碼): 0000 0000 0000 0000 0000 0000 1000 0001 129解析(char c = -12)
十進制表示: -12 原碼: 1000 0000 0000 0000 0000 0000 0000 1100 反碼: 1111 1111 1111 1111 1111 1111 1111 0011 補碼: 1111 1111 1111 1111 1111 1111 1111 010011 111 111 111 111 111 111 111 111 110 100 八進制表示: 3 7 7 7 7 7 7 7 7 6 4 十六進制表示: F F F F F F F 4總結
以上是生活随笔為你收集整理的C语言进制转换时自动扩展位?(原码、反码、补码)(打印%o、%x时会自动扩展到32位【负数先得到其十进制真实数值,再根据其真实数值得到八进制、十进制补码】)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言中,为什么%o、%d、%x输出的总
- 下一篇: visual studio快捷键 Qt