1. 程式人生 > >unsigned short A = 10; printf("~A = %u ", ~A); char c=128; printf("c=%d ",c); 輸出多少?

unsigned short A = 10; printf("~A = %u ", ~A); char c=128; printf("c=%d ",c); 輸出多少?

dsa 發生 int -h ali dsn 查看 AC b16

這是題目給出的答案:第一題,~A =0xfffffff5,int值 為-11,但輸出的是uint。所以輸出4294967285 第二題,c=0x10,輸出的是int,最高位為1,是負數,所以它的值就是0x00的補碼就是128,所以輸出-128。這兩道題都是在考察二進制向int或uint轉換時的最高位處理。 我不明白為什麽~A =0xfffffff5,還有為什麽c=0x10,不應該是c=0x08嗎,不好意思各位大俠,小弟的分數用完了。謝謝回答

2^32=4294967296,

A=10,為無符號型,轉換為二進制為0000 0000 0000 0000 0000 0000 0000 1010

所以~A的二進制位1111 1111 1111 1111 1111 1111 1111 0101即0xFFFFFFF5,如果轉換為符號整型的話則為-11,因為輸出的是無符號整型,無符號整型的範圍為0~4294967295,而0xFFFFFFF5轉換為無符號十進制整型為4294967285

第二題,發生溢出,因為有符號字符型其範圍為-128~127

127用二進制表示為:0111 1111,128表示為1000 0000,這裏發生溢出,因為第一位為1,為符號位,表示負數,即-128

技術分享圖片

unsigned short A = 10; printf("~A = %u\n", ~A); char c=128; printf("c=%d\n",c); 輸出多少?