#include<stdio.h>
main()
{short int a=1000000000000000;
printf("%d\n",a);
}
我得到的数字是-32768 这个我看着挺对的 取补正好是负0
当我输入0+15个1的时候 得到的数字却是-28087
不是首位是0的话 得到的十进制数应该是正数吗?
这个溢出的情况不能用常理来讲,你这个操作不是二进制操作,是代码层面上的,不是内存层面上的。
而你讲的取补是内存层面上的,怎样存储的。
.如果你想操作内存中的二进制数,要用这种指针(char*)&a指向的是内存中的二进制地址,我具体也没搞太明白,不过这个是我目前为止只在socket网编中看到,另外没什么用的,
表示看不太懂 我所谓的1+15个0所得的数就是这个吧。。为什么我得到了这个数呢
既然你说我的操作不对
a=1000000000000000 这个赋值实际上是取余
a=1000000000000000%65535
a放不下这么大的数
最后方的是1111 1111 1111 1111
按%d 输出 第一位是符号位 后面111 1111 1111 1111 所以输出-32768