[英]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
是數字,記住)的解釋方式。 所以-1
是2的補碼表示法中的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.