gcc
ビットごとの左シフト ( <<
) の奇妙な動作。これが私のコードです:
#include <stdio.h>
#include <string.h>
void foo(int n){
printf("1<<32:%d\n", 1<<32);
printf("1<<(32-n):%d\n", 1<<(32-n));
}
int main(){
foo(0);
}
パラメータとして 0 を渡すと、結果が異なる可能性があります。ソースコードのコンパイル:
$gcc main.c -o demo -lm -pthread -lgmp -lreadline 2>&1
main.c: In function 'foo':
main.c:5:3: warning: left shift count >= width of type [enabled by default]
プログラムの実行:
$demo
1<<32:0
1<<(32-n):1
この結果は、コンパイル オンライン サイトから得たものです。
0 を渡した場合、foo 関数の出力を 0 にするにはどうすればよいですか? (現在は代わりに 1 を出力します)