Class 为指向对象的指针赋值

Class 为指向对象的指针赋值,class,pointers,c++14,Class,Pointers,C++14,这是我的密码 当我将'a'的值传递给256512时,我分别得到257513,但对于1000这样的值,我得到769,对于16128100这样的值,我得到1 首先,我认为这可能与2的幂增加1有关,因为它们的二进制表示形式发生了变化。但是在1000的二进制表示中加1并不能得到769 请帮助我理解此代码。*p=1将最后一个字节(char)设置为00000000 1 当您将int类型转换为char时, (int)1000的二进制是(二进制)000000 11111 01000 您正在为最后8位分配(int

这是我的密码

当我将'a'的值传递给256512时,我分别得到257513,但对于1000这样的值,我得到769,对于16128100这样的值,我得到1

首先,我认为这可能与2的幂增加1有关,因为它们的二进制表示形式发生了变化。但是在1000的二进制表示中加1并不能得到769


请帮助我理解此代码。

*p=1
将最后一个字节(char)设置为
00000000 1

当您将int类型转换为char时,
(int)1000的二进制是
(二进制)000000 11111 01000
您正在为最后8位分配
(int)1
,即
769
(二进制)0000001100000001

使用
256512
是有效的,因为您更改的最后8位都是零,即
(int)256512是(二进制)11111 010100000000
,因此将最后一位设为1将为
(二进制)11111 010100000001,即(int)256513

我想(不确定)对于
16128100
你会得到1,因为这个整数远远超出int范围,因此没有赋值,并且在创建类对象时,a被设置为
0
。因此,将最后一位设置为1将使
a=1

   class Distance
   {
        public:
           int a;
   };
   int main()
    {
        Distance d1; //declaring object
        char *p=(char *)&d1;
        *p=1;
        printf("\n %d ",d1.a);
        return 0;
    }