天天看點

【基礎練習】n&1==0錯在哪兒?

這個問題源于一道分解質因數的水題(codevs 1313)

我的源碼中有一段是

int n,p;
	scanf("%d",&n);
	if (n&1==0){
		printf("%d",n/2);
		return 0;
	}
           

可是問題出現了 如果我們輸入一個偶數 這個程式塊根本不跑

這是一項很奇怪的事 因為快速幂非遞歸中 我們常用到if(n&1==1)這樣的句子

LGA大嬸,ZLC神犇紛紛表示無法解答 但鄙人在知乎上找到了答案http://www.zhihu.com/question/20798455

因為這時候我才恍然大悟:位運算優先級非常低 左右移甚至比加減運算優先級還低

沒想到的原因 一個是P黨時代不用考慮這個 直接and shr這樣的 在一個是平時也不大注意 果然還是加括号吧 也能提高程式可讀性

——明明如月,何時可掇?憂從中來,不可斷絕。

繼續閱讀