首页 > 其他 > 详细

memset()函数的赋值问题

时间:2019-08-14 19:39:57      阅读:84      评论:0      收藏:0      [点我收藏+]

用memset进行赋值操作

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;

下面对这个现象进行解释

memset是按照字节进行赋值的
它是对要进行赋值的变量的后八位二进制进行赋值
因为2^8等于256,已经完全适用于字符的ASCII了
但是呢,对于整数来说

对于1来说

1的二进制是00000000 00000000 00000000 00000001
去后面的8位00000001
而int型占4个字节,当初话的时候是进行每个字节变成00000001
就会变成0x01010101
00000001 00000001 00000001 00000001
十进制是16843009

再来看0

二进制是00000000 00000000 00000000 00000000,
取后8位00000000,初始化后00000000 00000000 00000000 00000000
结果是0

对于-1

负数在计算机中以补码存储,二进制是11111111 11111111 11111111 11111111,
取后8位11111111,则是11111111 11111111 11111111 11111111
结果也是-1

对于字符来说

比如a
a的ASCII码是97
二进制形式01100001,取后八位还是01100001
而且char是一个字节的,那么进行初始化还是01100001
为a

总结

对于memset可以对0和-1进行初始化纯属是巧合问题,memset的头文件是cstring,所以该函数其实是属于对字符进行初始化用的

memset()函数的赋值问题

原文:https://www.cnblogs.com/Emcikem/p/11354179.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!