C語言中超出範圍的資料的計算方法

2021-10-17 03:43:14 字數 1484 閱讀 7564

在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...