C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
在Mac上使用GCC版本4.2.1(Apple Inc. build 5664)时,以下小程序非常笨拙.
#include <stdio.h>
int main(){
int x = 1 << 32;
int y = 32;
int z = 1 << y;
printf("x:%d, z: %d\n", x, z);
}
Run Code Online (Sandbox Code Playgroud)
结果是x:0, z: 1.
知道为什么x和z的值不同吗?
非常感谢.
我试图在C中编写一个打印int的程序.由于某种原因我得到错误的价值观,
void printBits(unsigned int num){
unsigned int size = sizeof(unsigned int);
unsigned int maxPow = 1<<(size*8-1);
printf("MAX POW : %u\n",maxPow);
int i=0,j;
for(;i<size;++i){
for(j=0;j<8;++j){
// print last bit and shift left.
printf("%u ",num&maxPow);
num = num<<1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题,首先是为什么我得到这个结果(对于printBits(3)).
最大电平:2147483648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2147483648 214748364 8
第二是有更好的方法吗?