1樓:
如果你寫的是
cout<('a'+'c')/2<輸出-62我並不覺得奇怪。
因為'a'的ascii碼是65,'c'是67。相加是132。
'a'+'c'的「結果型別」是int,因此它的十六進位制是0x00000084,最高位是0表示正數!(你可以求sizeof('a'+'c')驗證一下,是4,int的大小)
3. static_case('a'+'c')相當於static_case(132)。
4. (char)132的十六進位制是0x84,二進位制是1000 0100,最高位符號位是1表示這是個負數!
5. 用8位補碼解析0x84,得到的結果是-62!
用下面的告訴你結果:
#include
using namespace std;
int main()
/*輸出:
('a'+'c') = 132 = 0x00000084
(int)(char)('a'+'c') = -124 = 0xffffff84
*/最後再補充一句,為了不讓'a'+'c'的結果「溢位」,導致char('a'+'c')/2得到負數,更好的辦法是char('a') + char('c'-'a')/2。
這兩種做法雖然數學上是等價的,但是第一種方法的「中間計算過程」存在「溢位」,導致結果不是想要的。
ps:第二種做法在做二分查詢和快速排序的時候也都會用到!
2樓:
cout<<(char)(('a'+'c')/2)< 3樓:匿名使用者 我這輸出b,也許就是你編譯器有bug c++中定義char name[20]後,為什麼用printf("%s",name)就能輸出一連串字串? 4樓:匿名使用者 %s代表bai字串,name是字元陣列 的首地址du,也就是字串zhi的首地址。dao所以直接專輸出字串。 c++中定義屬char型陣列即是定義c風格字串。 格式化輸出函式printf第一個引數中%s代表可變引數部分中對應位置變數為指向字串地址的指標。 在c/c++中陣列的名是儲存該陣列首地址的常量。 需要注意: (1)c++中定義內建型別區域性陣列變數,不提供預設初始化。這裡char是內建型別,如果不初始化其中儲存的是記憶體中的隨機數。 (2)c++不會對陣列進行越界檢查,而是將越界交給os,如果os檢測記憶體不可讀或寫,對齊進行讀寫os核心會丟擲中斷異常。 (3)c++中c-style字串讓然是以'\0'空字元為結束標誌。printf中的%s仍然會在輸出的時候從name指定的記憶體位置開始讀取資料再交給現存快取以在顯示器上顯示。不初始化或不以'\0'結尾的字串將輸出亂碼,這是如果越界讀取到了不可讀的記憶體,將會報段錯誤(unix核心)或記憶體不可讀(windows)異常以終端程式。 5樓: %s的概念 就是輸出字串 字串必須要以'\0'結尾 也就是如果你 的name[20]中有一個位置是'\0'的話專printf("%s",name)就能正確輸出如果你是這樣屬char name[20]=;由於name陣列中沒有'\0'你對name指標用printf函式就會出錯 6樓:匿名使用者 %s是從起始位置輸出字元直到遇到\0為止,合法, 陣列在函式中做實參時會轉成指標。 7樓:匿名使用者 1,%s 是輸出字串;%c,只輸出單個字元。 2, 定義name是陣列,name表示陣列的第一個字元的地址 8樓:匿名使用者 陣列傳遞給printf函式當引數時,自動退化成指標,printf函式輸出指標指向空間,預設到'\0',結束,所以合法 9樓:wang非在心上 這個復就不需問為什麼啦!!因製為這是它的功能bai啦!!就像1+1為什麼等於du2了。你只需要zhi記住它的作用就是dao 用來輸出資料的!! 那個%s是格式識別符號啦!!就是規定後面的引數是以怎樣的格式輸出的!!另外還有其他幾種常用格式識別符號,%c、%d、%o 10樓:匿名使用者 printf函式本來就是c中的函式 。。 c,c++中關於char* 以及 char陣列的問題 11樓:veket的小號 1.因為 iostream內部 cin cout 對char* 做了特殊處理.......因為c/c++ 輸入輸出字串通常要用到char* 如果直接輸出地址,就要用別的方法來輸出字串了 就不方便了.....所以直接輸出地址 那裡放著的字串...... 3、sizeof("hello");得到 字串實際長度 + \0 佔的一個位元組 一般用strlen函式....... 同 1、2,str陣列名 是 char* 地址 12樓:愛問西瓜愛答樹 pstr是指標,*pstr,取地址的內容。顯示什麼,這個取決於cout用哪個函式,由引數型別決定。想輸出字串的地址用char str2="123abc"; 2.arr是陣列,是首地址。int * ,表示指向的地址空間是int 4位元組的,char *當然是char 1位元組的。 3.sizeof("hello"); 4.cout有個對字串輸出的過載,全部輸出,遇到'\0'結束。 13樓:匿名使用者 運算子過載可以做任何事情,沒有任何規則所只要是地址列印出就是地址。而且char*是特殊的,從來沒有在哪輸出過地址 運算子過載,不是int/char不同,而是過載後int*和char*不同 sizeof("hello"),這是唯一的辦法,賦值給指標後只能用strlen,不能用sizeof 同樣,不要總想著引數是地址,輸出也是地址,如果這樣,高階語言就太無用了 14樓: 1、這是cout(const char *)函式的定義。為方便處理字串。 2、字串是陣列,int只是一個數; 3、include 4、同1. 1 對計算機來說,某一個變數不管是char,int,它在儲存時都是二進位制的數字而已,輸出16進位制應該是在com putchar中控制的,對於一個數來說,輸出的格式是幾進位制是程式來控制的,比如printf d dl 那麼送到終端顯示的是十進位制的,如果是 x就是16進位制,o就是8進位制,但是在... 重點是creatlist這個函式,datac必須是malloc分配出來的記憶體,不然就會出問題.應該是這樣的 p pdata malloc 256 scanf s p pdata 傑大哥哈哈哈 asadrcvs5 2 f amng bkuqte lzlr kxojfrc eqsauzx 夫婿久離別,... 吉祥二進位制 本身字元型別即為整型的一種,當把大位元組的整型資料型別比如int型別以字元型別的形式輸出時,一般輸出函式會對大位元組整數型別進行截斷操作,它等同於將大位元組整型變數 常量轉換為小位元組的整型變數 常量。比如下面的 include int main void 把unsgined型別作為c...c語言的問題char型輸出的16進位制數值怎麼輸出十進
c語言char輸出字串是亂碼,C語言,字串輸出是亂碼
c語言定義整型資料輸出字元,C語言定義整型資料輸出字元