乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C語言補漏(1)

       黃南山 2017-09-16

      作為一個C的新手(雖然學(xué)的第一門語言就是C,可是用C實際開發(fā)項目卻是最近的事情),對使用C過程中遇到的各類問題、疑惑、知識漏洞進(jìn)行彌補無疑是非常有必要的,于是決定將每次遇到的知識漏洞寫到博客上。

      今天在寫代碼的過程中對一個函數(shù)進(jìn)行了重構(gòu),函數(shù)的用處是將一塊內(nèi)存中的內(nèi)容打印成16進(jìn)制表示的字符串;很悲哀的輸入的是一個char指針:char* buffer;當(dāng)調(diào)用Format("%02X",*buffer)的時候出現(xiàn)問題了,

      比如:0xB0輸出變成了:“FFFFFFB0”;最后發(fā)現(xiàn)是char惹得禍;

      char取為unsigned char還是signed char是平臺相關(guān)的,而我的平臺中,char默認(rèn)為有符號的,那么(signed)char和unsigned char究竟有什么區(qū)別呢?

      char帶符號能表示-128~127, unsigned char沒有符號位,能表示0~255;而本質(zhì)上都是表示8位的數(shù)字。

      但是我們?nèi)绻硎綽yte時(C本身沒有byte類型),應(yīng)該用unsigned char,這是為什么呢?

      因為當(dāng)用char對int進(jìn)行賦值時,系統(tǒng)認(rèn)為最高位是符號位,而int可能是16或者32位,那么會對最高位進(jìn)行擴(kuò)展(注意,賦給unsigned int也會擴(kuò)展)

      而如果是unsigned char,那么不會擴(kuò)展。

      這就是二者的最大區(qū)別。

      同理可以推導(dǎo)到其它的類型,比如short, unsigned short。等等

      還是用例子來說明問題吧:

      復(fù)制代碼
      #include "stdafx.h"
      #include <stdio.h>

      void test(unsigned char v)
      {
      char c = v;
      unsigned char uc = v;
      unsigned int a = c, b = uc;
      int i = c, j = uc;
      printf("----------------\n");
      printf("%%c: %c, %c\n", c, uc);
      printf("%%X: %X, %X\n", c, uc);
      printf("%%u: %u, %u\n", a, b);
      printf("%%d: %d, %d\n", i, j);
      }

      int main(int argc, char* argv[])
      {
      test(0xB0);
      test(0x68);
      return 0;
      }
      復(fù)制代碼

      運行結(jié)果:


      所以,如果表示的是byte的情況,建議用unsigned char;當(dāng)然,如果非要用char也可以;加上& 0xFF也能解決問題吧。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多