memset赋值0和-1,还能赋其他值吗?

今天用memset时发现它不能给一个数组赋值1,于是就花时间了解了一下它。先上msdn的介绍:


memset

Sets buffers to a specified character.

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

Return Value

memset returns the value ofdest.

Parameters

dest

Pointer to destination

c

Character to set

count

Number of characters

Remarks

The memset function 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赋值。大家可以多尝试几个数。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值