memset()函数的赋值问题
用memset進(jìn)行賦值操作
int a[3]; char b[3]; memset(a,0,sizeof(a)); 0 0 0 memset(a,1,sizeof(a)); 16843009 16843009 16843009 memset(a,-1,sizeof(a)); -1 -1 -1 memset(b,'a',sizeof(b)); a a a參考表
sizeof(char)=1; sizeof(int)=4; sizeof(float)=4; sizeof(long)=4; sizeof(long long)=8; sizeof(double)=8;下面對(duì)這個(gè)現(xiàn)象進(jìn)行解釋
memset是按照字節(jié)進(jìn)行賦值的
它是對(duì)要進(jìn)行賦值的變量的后八位二進(jìn)制進(jìn)行賦值
因?yàn)?^8等于256,已經(jīng)完全適用于字符的ASCII了
但是呢,對(duì)于整數(shù)來(lái)說(shuō)
對(duì)于1來(lái)說(shuō)
1的二進(jìn)制是00000000 00000000 00000000 00000001
去后面的8位00000001
而int型占4個(gè)字節(jié),當(dāng)初話的時(shí)候是進(jìn)行每個(gè)字節(jié)變成00000001
就會(huì)變成0x01010101
00000001 00000001 00000001 00000001
十進(jìn)制是16843009
再來(lái)看0
二進(jìn)制是00000000 00000000 00000000 00000000,
取后8位00000000,初始化后00000000 00000000 00000000 00000000
結(jié)果是0
對(duì)于-1
負(fù)數(shù)在計(jì)算機(jī)中以補(bǔ)碼存儲(chǔ),二進(jìn)制是11111111 11111111 11111111 11111111,
取后8位11111111,則是11111111 11111111 11111111 11111111
結(jié)果也是-1
對(duì)于字符來(lái)說(shuō)
比如a
a的ASCII碼是97
二進(jìn)制形式01100001,取后八位還是01100001
而且char是一個(gè)字節(jié)的,那么進(jìn)行初始化還是01100001
為a
總結(jié)
對(duì)于memset可以對(duì)0和-1進(jìn)行初始化純屬是巧合問(wèn)題,memset的頭文件是cstring,所以該函數(shù)其實(shí)是屬于對(duì)字符進(jìn)行初始化用的
轉(zhuǎn)載于:https://www.cnblogs.com/Emcikem/p/11354179.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的memset()函数的赋值问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用Axure RP原型设计实践05,了
- 下一篇: 排序算法之——插入排序