C言語なら、オレに聞け! <4>

このエントリーをはてなブックマークに追加
737デフォルトの名無しさん
>>735
こんなんは、どうや?
return ( (n<0) ? ((signed int)-((unsigned int)-n>>b)) : (n>>b) ) ;
738デフォルトの名無しさん:2001/07/05(木) 07:05
0に向かって丸める方法

 正なら単に右算術シフトだけすればいい

 負数なら 色々あると思う。
思いついたのは
  1)符号反転して処理した後符号反転する
if(n<0) return -(-n>>b); else n>>b;

  2) (1<<b)-1を加算してから右算術シフトする
retur ( n +( (1<<b) -1 )&(n>>32 ) )>>b;