簡體   English   中英

為char分配負值

[英]Assigning negative value to char

為什么以下代碼打印“?” 如何將-1分配給unsigned char

char test;
unsigned char testu; //isn't it supposed to hold values in range 0 - 255?
test = -1;
testu = -1;
cout<<"TEST CHAR = "<<test<<endl;
cout<<"TESTU CHAR = "<<testu<<endl;

unsigned只會影響數字的內部表示( char是數字,記住)的解釋方式。 所以-12的補碼表示法中的1111 1111 ,當放入unsigned char將含義(對於相同的位表示)更改為255。

問號可能是您的字體/代碼頁沒有將(擴展的)ASCII值255映射到它可以顯示的字符的結果。

我不認為<<在unsigned char和signed char之間進行辨別,因為它將它們的值解釋為ASCII碼,而不是普通數字。

此外,默認情況下, 取決於您的編譯器 char是有符號還是無符號; 實際上,規范聲明有三種不同的char類型 (plain,signed和unsigned)。

將負值分配給無符號變量時,結果是它會回繞。 在這種情況下,-1變為255。

我不知道C或C ++,但我的直覺告訴我它包裝-1到255並打印ÿ ,但是因為它不是在它打印的前128個字符中? 代替。 只是一個猜測。

要測試這個,嘗試分配-191並查看它是否打印A (如果我的數學關閉則打印B )。

有符號/無符號是通過使用該數字的最高位來定義的。 您可以為其指定負整數。 符號位將在簽名的情況下解釋(當您使用它執行算術時)。 當你將它視為一個字符時,它只需要最高位,就好像它是一個無符號字符,只產生一個超過127(十進制)的ASCII字符:

unsigned char c = -2;

相當於:

unsigned char c = 128;

當c被視為一個角色時。 -1是一個例外:它設置了所有8位,並被視為255 dec。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM