在c/c++語言中,資料可以分為無符號資料unsigned和有符號資料signed,如果不宣告資料的型別,預設是有
符號的。資料在記憶體中都是以二進位制補碼的形式進行儲存的。
1、原碼、反碼、補碼
1、正數的原碼、反碼、補碼都是其本身;負數的等於原碼除符號位外全部按位取反,負數的補碼等於負數的反碼加1.
2、無符號資料全部都正數;有符號資料的最高位表示符號位,符號位為0表示正數,符號位為1表示負數。
3、可以由負數的原碼求反碼和補碼,也可以由負數的補碼來求原碼。對負數的補碼按照原碼求補碼的操作再次求補碼
得到負數的原碼。
2、超出範圍資料的計算方法(1)操作步驟:
1、我們將資料以補碼的形式存放在記憶體中
2、判斷賦值變數的型別:如果賦值變數是unsigned型別,則表示正數,正數的原碼等於補碼;如果賦值變數是
signed型別,則進一步對符號位進行判斷。如果符號位為0,表示正數;如果符號位為1,表示負數,需要將補碼
轉換為原碼的形式。
例:以unsigned char 和 signed char 型別的資料為例
例1、char a = 200;
執行結果分析:
1、200是乙個正數,正數的原碼和補碼相等,將200以補碼的形式存放咋記憶體中:1100 1000
2、賦值變數a預設是乙個有符號的數,1100 1000 的最高位是1,表示負數。對負數的補碼再次求補碼,得到負數
的原碼進行輸出:1011 1000,即十進位制的-56
例2、unsigned char b = 300;
執行結果分析:
1、300是乙個正數,將其按補碼的形式存放在記憶體中 1 0010 1100
2、賦值變數a是乙個unsigned型別,表示乙個正數。但是char占用乙個位元組,所以捨棄高位,去低八位得到如下:
0010 1100 ,將補碼轉換為原碼相當於十進位制的44
(2)技巧:
1、口訣:超出範圍的資料如果是正數,則減去256;超出範圍的資料如果是負數,則加上256.
例:200-256 = -56; 300-256 = 44
2、畫圓法:
GridView刪除資料時索引超出範圍的解決方法
今天用gridview運算元據時,總是提示 上網查了下解決方法,發現網上下面的答到了重點 try 首先設定乙個gridview 乙個主鍵 對應於你資料庫表的主鍵 gridview1.datasource myds gridview1.datakeynames new string 主鍵 gridvi...
Qt設定spinBox不能顯示超出範圍的數字
由於對tablewidget進行批量新增行操作時,需要不斷更新spinbox的上限,並能使得其能形成迴圈。connect spinbox,qoverload int of qspinbox valuechanged int i 在自定義初始化ui介面函式中進行相關宣告,發現呼叫仍不能完成。改變思路,...
css樣式 超出範圍的文字預設用 來表示
width 456rpx text overflow ellipsis overflow hidden white space nowrap 1.width 固定乙個寬度 2.text overflow 規定當文字溢位包含元素時所發生的事情 3.overflow 規定當內容溢位元素框時發生的事情 a...