int a = 016;//016 和 16 不一样!!! a%= 6-1; a+=a*=a/=3; 求解答过程和结果,谢谢

作者&投稿:友奇 (若有异议请与网页底部的电邮联系)
int a=016;
最高位的0表示这个数是一个八进制的数,
八进制的016相当于10进制的:1*8+6==14
a%=6-1;//相当于a=a%(6-1)=14%5==4;

a+=a*=a/=3;
相当于:
a/=3;
a*=a;
a+=a;
相当于:
a=a/3;
a=a*a;
a=a+a;
由于a%=6-1;运算后a==4
所以
a=a/3==1;
a=a*a==1*1==1;
a=a+a==1+1==2;
所以最后a的值是2

int a = 016; // 016表示为8进制,所以a=14。

a%= 6-1; // 相当于a=a%(6-1)=14%5=4,所以a=4

a+=a*=a/=3; // 相当于a=a/3=4/3=1; a=a*a=1*1=1; a=a+a=1+1=2;所以a=2;

int a = 16; // 16表示为10进制,所以a=16。
a%= 6-1; // 相当于a=a%(6-1)=16%5=1,所以a=1 a+=a*=a/=3; // 相当于a=a/3=1/3=0; a=a*a=0*0=0; a=a+a=0+0=0;所以a=0;

int *a=b与int*a=&b有什么不同~

int *a=b是说把b的值赋值给指针a(*a), int*a=&b是说让指针a(*a)指向b的地址。 举个例子说: int b=5,c=9
int *a1=b;----------------------1
int *a2=&b;_____________________2
b=c;-------------------------3 这个时候*a1=5,*a2=9 。因为在说第一步时已经把b的值,也就是5传给*a1,所以*a1=5 。在第二步时,把b的地址,也即是&b传给了*a2,这个时候*a2=5 。
但是在第三步时,b的值变成了c的值,也就是9,我们知道这个时候 b的地址早就传给*a2了,所以,*a2和这个时候的b的值是一样的, 即*a2=9。

扩展资料:
(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。显然可以用赋值语句对内存地址赋值。
假设有这么一段代码:(假设开辟空间时p 被分配给了3001H、3002H 两个位置)
int *p;p=2003H;*p=3000H,**p的值为多少?
**p=*(*(p))=*(*(2003H))=*(3000H)=3000H。
那么&&p、*(&p)和&(*p)又等于多少?
&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数怎么可能有地址呢?
*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。
&*p=&(*p)=&(3000H)=2003H,之前有人认为这个是不成立的,实际上&(3000H)是求存储3000H这个变量所在的内存地址,仍然是p的值。下面的代码是个很简单的例子:
#include
using namespace std;//环境vc6.0int main(){int *a;a=(int*)5;cout<<(unsigned int)&*a<<endl;}
输出的结果为5
参考资料:指针_百度百科

50%;
100%;
1/6,0.16;
16