memset的使用以及原碼反碼補碼 md

2021-07-16 23:38:25 字數 2388 閱讀 2361

正數的原碼=反碼=補碼

負數情況較為複雜:負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)

[-1] = [10000001]原 = [11111110]反 = [11111111]補

計算機必然不會去區分符號位,因此符號位是要參與計算的,如果使用原碼計算:

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

使用反碼計算:

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

使用補碼計算:

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補 + [1111 1111]補 = [1 0000 0000 ] = [0000 0000]補=[0000 0000]原

這樣0用[0000 0000]表示, 而以前出現問題的-0則不存在了.而且可以用[1000 0000]表示-128:

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補 + [1000 0001]補 = [1 1000 0000]= [1000 0000]補

-1-127的結果應該是-128, 在用補碼運算的結果中, [1000 0000]補 就是-128. 但是注意因為實際上是使用以前的-0的補碼來表示-128, 所以-128並沒有原碼和反碼表示.(對-128的補碼表示[1000 0000]補算出來的原碼是[0000 0000]原, 這是不正確的)

將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作,其返回值為指向s的指標。

要注意的是,memset是對位元組進行操作,所以上述程式如果改為

intarray[5] = ;

for(int i = 0; i < 5; i++)

cout

for(int k = 0; k < 5; k++)

cout

<143

5216843009

16843009

16843009

16843009

16843009

為什麼呢?

因為memset是以位元組為單位就是對array指向的記憶體的5個位元組進行賦值,每個都用ascii為1的字元去填充,轉為二進位制後,1就是00000001,佔乙個位元組。乙個int元素是4位元組,合一起就是00000001000000010000000100000001,就等於16843009,就完成了對乙個int元素的賦值了。

int first[10+1],next[10+1];

memset(first,-128, sizeof(first));

for (int j = 0; j < 11; ++j)

int a = 0x80808080;//(0x80 = 1000 0000 = -128的補碼)

cout

<<" "

<< a <2139062144 -2139062144 -2139062144 -2139062144 -2139062144 -2139062144 -2139062144 -2139062144 -2139062144 -2139062144 -2139062144 -2139062144

int first[10+1],next[10+1];

memset(first,-1, sizeof(first));

for (int j = 0; j < 11; ++j)

int a = 0xffffffff;//(0xff = 1111 1111 = -1的補碼)

cout

<<" "

<< a <1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

int first[10+1],next[10+1];

memset(first,255, sizeof(first));

for (int j = 0; j < 11; ++j)

// int a = 0x7f7f7f7f;//(0x7f = 0111 1111 = 127的補碼)

int a = 0xffffffff;//(0xff = 1111 1111 = 255的補碼)

cout

<<" "

<< a <1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

原碼 反碼 補碼的產生 應用以及優缺點?

數字在自然界中抽象出來的時候,一棵樹,兩頭牛,是沒有正數和負數的概念的 計算機儲存最原始的數字,也是沒有正和負的數字,叫沒符號數字 如果我們在記憶體分配4位 bit 去存放無符號數字,是下面這樣子的 為了表示正與負,人們發明了 原碼 把生活應該有的正負概念,原原本本的表示出來 把左邊第一位騰出位置,...

詳解原碼 反碼以及補碼

很多人都只知道計算機使用的是二進位制,但很少有人了解計算機是以補碼的方式進行儲存資料的,之所以使用補碼而不是直接使用二進位制實際是為了解決正負運算的問題。5在二進位制中表示為101b b為二進位制單位 如果是在32位計算機中,我們高位補零 00000000 00000000 00000000 000...

原碼 補碼 反碼以及位運算

2 位運算 機器數是乙個數在計算機中的二進位制表示形式,機器數是帶符號的,在計算機中用乙個數的最高位 第一位 存放符號,正數為0,負數為1。例如1 帶符號即 1 在計算機中的最終表示形式為 0000 0001,依此類推 1的二進位制為 1000 0001。這種表示方式又叫做原碼,其中0的原碼為000...