我們學習了有符号和無符号數,可以知道,在一個字節中存放了8位的數據,例如1111 1111這樣的8位二進制數據,就有:
(1) 如果把這8位二進制數據當作“有符号”數看待,那麼,最高位是符号位,其餘7位是數值位;
(2) 如果把這8位二進制數據當作“無符号”數看待,那麼,沒有符号位,8位數據都是數值位;
可以看到,同一個二進制數據,當中有符号和無符号數看待的時候,它們表示的結果是不一樣的。
在C語言中,提供了unsigned這個關鍵字來表示無符号數。例如:
unsigned char x;
就是定義了x這個變量是無符号類型,所以它表示的數值沒有符号位。例如存放1111 1111數據,因為無符号數沒有符号位,全部8位數據是數值位,所以表示255這個數值。表示的最小數據就是0000 0000,既0 數值。如下是一個測試的例子。
程序運行的結果如下:
可以看到,對于255這個整數,其二進制表示為1111 1111,那麼,就有:
(1) 把255賦給a1變量,當作有符号數看待,所以,符号位是1,表示負數,數值位是111 1111,那麼,要表示為十進制,就是數值位取反,得到000 0000,然後,加1,得到000 0001,所以,二進制1111 1111表示為有符号數是-1。所以與輸出的a1變量值是-1一緻。
(2) 把255賦給a2變量,當作無符号數看待,所以,8位二進制數據1111 1111全部存儲到a2變量中當作數值位,所以,a2變量輸出是255。
對于a3變量的操作,我們是把一個負數賦值給無符号數a3,那麼,由于-1這個數值其在1個字節中表示的二進制數為1111 1111,所以,就相當于把1111 1111數值賦給a3變量,那麼,a3變量中就有1111 1111這樣的數據,與a2變量存儲的數據是一樣的。所以,輸出的數值與a2變量一樣。
對于char、short、int、long 類型,可以使用unsigned關鍵字來修飾,定義無符号類型的數據。但是,對于 float、double類型的數據,由于是浮點數,所以,不可以使用unsigned關鍵字來修飾。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!