C語言的位域和符號位擴充套件

2021-05-12 15:05:08 字數 342 閱讀 1183

最近面試易路聯動的時候考了位域方面的只是,結果全做錯了,回來想了會也沒弄明白,後來上網查了下原來是英特爾的面試題

**如下

答案為:

-1,0,-1,4

t.b = 1很好理解,t.a和t.c等於-1就不大好理解了,這個就關係到資料型別與資料在計算機中的表示了,因為顯示的時候指定的是%d型別的,那麼說明將引數當成整形來處理,而t.a只佔一位,所以要當他當成整形處理就需要對該數擴充套件,計算機中數字都是以補碼表示的,所以擴充套件時第一位為1則擴充套件位全補1,若為0,則擴充套件位全補為0,所以t.a擴充套件位成0xffffffff(32位系統)或0xffff(16位系統),而0xffffffff和0xffff的補碼值為-1。

C語言位域解析 符號位擴充套件規則

從乙個例子說起 int main void bits num printf input an integer for i 0 15 scanf d num.i printf i d,cba d d d n num.i,num.bits.c,num.bits.b,num.bits.a return 0...

零位擴充套件和符號位擴充套件

1 符號擴充套件 當用更多的記憶體儲存某乙個有符號數時,由於符號位位於該數的第一位,擴充套件之後,符號位仍然需要位於第一位,所以,當擴充套件乙個負數的時候需要將擴充套件的高位全賦為1 對於正數而言,符號擴充套件和零擴充套件是一樣的,因為符號位就是0 比如乙個用乙個8 位二進位制表示 1,則是 100...

C語言位域和位段

c結構體之位域 位段 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區...