关于c:memset为什么只能赋0-和-1

3次阅读

共计 528 个字符,预计需要花费 2 分钟才能阅读完成。

在 C 语言中文网中查到,memset() 的原型为:

include <string.h>
void memset(void s, int c, unsigned long n);

函数的性能为:将 s 指向的前 n 个字节单元,每个字节单元赋值为 c。
例子:
int p = (int) malloc(10 * sizeof(int));
memset(p, 0, 10 * sizeof(int));
// 能够用 int p = (int) calloc(10, sizeof(int)); 代替,此例子为了阐明 memset 的原理。

以下内容出自:https://blog.csdn.net/a474617…
0 和 - 1 的二进制示意别离为 0000 0000 以及 1111 1111,大家留神到 1 个 int 变量是占 4 个字节的,而 memset 每次只能给 1 个字节的内存单元赋值,然而因为刚好 0000 0000 和 1111 1111 的高位低位都一样,所以 memset 就“凑巧”实现了每 4 个字节赋 32 位 0 和 1。

因为 1 的二进制示意为 0000 0001 所以 4 个字节连起来就是 0000 0001 0000 0001 0000 0001 0000 00001,转换成 10 进制也就是 16843009。这就阐明并不是每一个 10 进制数都能正确用 memset 赋值。大家能够多尝试几个数。

正文完
 0