进制及相关知识小总结

关于进制的计算问题
题目:
假设在n进制下,下面的等式成立,567*456=150216,n的值是(D)
A. 9
B.  10
C.  12
D.  18
首先
(5n^2+6n+7)(4n^2+5n+6)
=20n^4+24n^3+28n^2+25n^3+30n^2+35n+30n+30n^2+36n+42
=20n^4+49n^3+88n^2+71n+42=n^5+5n^4+2n^2+n+6      (1)
两边同时对n取余
42%n=(6%n)=6       (2)     可以排除掉B
两边同时除以n再对n取余
(71+42/n)%n=(1+6%n)%n=1     (3)




宏定义计算
#define  M(x,y,z)     x*y+z
Void main()
{
int a=1,b=2,c=3;
printf(“%d\n”,M(a+b,b+c,c+a);
a+b*b+c+c+a
}
本来:(1+2)*(2+3)+(3+1)=19     此算法错误
正确算法     1+2*2+3+3+1=12   
由于此算法中没有括号的限制,如果(x)*(y)+(z),则是按照原来的算法计算,因为没有括号,则应该按照的优先级顺序计算


关于基本知识
位操作运算符有6个     
~:按位取反
&:按位与     相同位都为1才为1
|:按位或     相同位有1就为1
^:按位异或   相同位不一样为1
<<:按位左移   按位左移,右边统一补0    左移后数字会变大2^n
>>:按位右移   按位右,左统一补0        右移后数字会变小2^n
前置++与后置++
前置++:先++再赋值     先对后面的数字进行++运算,再对前面的数字进行赋值
后置++:先赋值再++     先将后面数字的值赋给前面的数字,再进行++运算 
a=0;      b=++a     b=1,a=1
a=0;      b=a++     b=0,a=1


关于while和do while结构
While结构保证循环执行0次及以上
Do while结构保证循环执行一次及以上
Break不能单独使用再if语句中
Switch中不允许的类型为浮点型和字符串
Switch注意的点:
Case的标签必须唯一    case b:error 有可能出现标签一致,因为b是一个变量,不唯一
Switch考点:从哪里进,从哪里出
1. 表达式的值和标签值相同时
2. 遇到break或switch结束的时候
Case标签可以随意放,不一定非要按顺序来
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值