class Distance
{
public:
int a;
};
int main()
{
Distance d1; //declaring object
char *p=(char *)&d1;
*p=1;
printf("\n %d ",d1.a);
return 0;
}
这是我的代码。
当我将'' 的值传递给 256,512 时,我分别得到 257,513 但是对于 1000 这样的值,我得到 769 ,对于 16,128,100 这样的值,我得到 1 。
首先,我认为由于二进制表示的变化,它可能与2的幂增加1有关。但是在1000韩元的二进制表示中加1会给我769。
请帮我理解这段代码。
答案 0 :(得分:0)
*p = 1
将最后一个字节(char)设置为000000001
当你输入int到char时,
(int)1000
的二进制文件为(binary)0000001111101000
您为最后8位i分配(int)1
,(binary)0000001100000001
为769
。
使用256512
有效,因为您更改的最后8位全部为零,(int)256512 is (binary)111110101000000000
因此将最后一位设为1会为您提供(binary)111110101000000001 which is (int)256513
我认为(不确定)你为16,128,100
得到1,因为这个整数远远超出了int范围,因此没有分配,并且在创建类对象时将a设置为0
。因此将最后一位设置为1会使a = 1