memset賦值0和 1,還能賦其他值嗎?

2021-07-30 06:47:58 字數 1111 閱讀 2931

今天用memset時發現它不能給乙個陣列賦值1,於是就花時間了解了一下它。先上msdn的介紹:

sets buffers to a specified character.

void *memset( void *dest, intc, size_tcount);

return value

memsetreturns the value ofdest.

parameters

dest

pointer to destinationc

character to set

count

number of characters

remarks

thememsetfunction sets the firstcount bytes ofdest to the character c.

最後一句翻譯過來就是:memset函式將dest所指的前count位元組的記憶體空間賦值為c。先看一段程式吧

很容易知道0和-1的二進位制表示分別為0000 0000以及1111 1111,大家注意到1個int變數是佔4個位元組的,而memset每次只能給1個位元組的記憶體單元賦值,但是因為剛好0000 0000 和1111 1111的高位低位都一樣,所以memset就「湊巧」完成了每4個位元組賦32位0和1,也就是十進位制的0和-1.那換成其他的行嗎?再看一段程式。

因為1的二進位制表示為0000 0001 所以4個位元組連起來就是0000 0001 0000 0001 0000 0001 0000 00001,轉換成10進製也就是16843009。這就說明並不是每乙個10進製數都能正確用memset賦值。大家可以多嘗試幾個數。

0和1,黑和白

0和1那麼的簡單,就這樣組成了現代社會最堅實的it基礎。黑和白,這麼的簡單,就這樣引領了人們久遠時代裡面的想象力,儲存了人們的創造力。在那些只是紙筆的時間裡面,黑和白就是那麼重要。因為黑色,其實不是沒有光,而是所有的光都已經被吸收了。而白色,其實並不是沒有顏色,而是有所有顏色。這麼來想,黑白的簡單突...

IT就是0和1的問題

最近一直在使用火狐作為主要的瀏覽器,很少使用ie 遨遊 the world等瀏覽器,為什麼呢?主要還是流氓軟體鬧的,怕怕了,機器因為那些東西重新做了好幾次了,折騰不起了。公司的 最近重新製作了,感覺很舒服,等等,這種舒服只是在遨遊等ie系的瀏覽器下邊的,在火狐地下則就不是那麼好看了。新的 完全參照了...

IT就是0和1的問題

最近一直在使用火狐作為主要的瀏覽器,很少使用ie 遨遊 the world等瀏覽器,為什麼呢?主要還是流氓軟體鬧的,怕怕了,機器因為那些東西重新做了好幾次了,折騰不起了。公司的 最近重新製作了,感覺很舒服,等等,這種舒服只是在遨遊等ie系的瀏覽器下邊的,在火狐地下則就不是那麼好看了。新的 完全參照了...