zoukankan      html  css  js  c++  java
  • memset()函数的赋值问题

    用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,所以该函数其实是属于对字符进行初始化用的

  • 相关阅读:
    Map集合
    Collection的另外一个子类LinkedList&Set集合
    多项式牛顿迭代 学习笔记
    《混凝土数学》第二章 和式 学习笔记
    洛谷P5039 最小生成树 题解
    gdfzoj#236 | 提高组练习题16 Set
    CF979E 题解
    CF1039D 题解
    CF886E 题解
    CF1061C 题解
  • 原文地址:https://www.cnblogs.com/Emcikem/p/11354179.html
Copyright © 2011-2022 走看看