cmp*_*ezg 0 c bit-manipulation shift
我试图使用int的所有位生成一个随机数.当我使用rand()函数时,它似乎永远不会使用第一位,所以我试图把整个东西移到一个地方.但是,当我尝试打印新移位的数字时,它总是打印4294967295,所以我猜这是一个溢出.为什么我不能使用那个位呢?有办法吗?
如果没有使用第一位,它就可以正常工作(打印是在随机数移位之前和之后):
00000100001100111111001010010111
00001000011001111110010100101110
Run Code Online (Sandbox Code Playgroud)
但如果需要第一位,则会发生以下情况:
01010110100001110011110011011111
42949672950101101000011100111100110111110
Run Code Online (Sandbox Code Playgroud)
请帮忙!!它在技术上有效,它只是先输出数字......
typedef struct{
int blocks[NUM_BLOCKS];
} WWord;
void printbits(unsigned int n){
int i;
//printf("%u = ",n);
for(i=SIZE_OF_INT*SIZE_OF_BYTE-1;i>=0;i--){
int mask = 1<<i;
int maskedn = n&mask;
int thebit = maskedn >> i;
printf("%u",thebit);
}
printf("\n");
}
void fillword(WWord *word){
int i;
for(i=0; i<NUM_BLOCKS;i++){
unsigned int ran = rand();
printbits(ran);
ran = ran<<1;
printbits(ran);
word->blocks[i] = ran;
//word->blocks[i]<<1;
printf("\n");
}
}
Run Code Online (Sandbox Code Playgroud)
看来你在printbits函数中使用int而不是unsigned int.所以它将它转换为使用MSB作为符号位的signed int.将那些int更改为unsigned int它将起作用.
更改您的功能如下:
void printbits(unsigned int n){
int i;
//printf("%u = ",n);
for(i=SIZE_OF_INT*SIZE_OF_BYTE-1;i>=0;i--){
unsigned int mask = 1u<<i;
unsigned int maskedn = n&mask;
unsigned int thebit = maskedn >> i;
printf("%u",thebit);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)