我正在尝试使用 int 的所有位生成一个随机数。当我使用 rand() 功能时,它似乎从来没有使用过第一位,所以我试图将整个事情转移到一个地方。但是,当我尝试打印新的移位数字时,它总是打印 4294967295,所以我猜这是一个溢出。但是,为什么我不能使用那个位?有办法吗?
如果不使用第一位,它可以正常工作,像这样(打印在随机数移位前后):
00000100001100111111001010010111
00001000011001111110010100101110
但是如果需要第一位,就会发生这种情况:
01010110100001110011110011011111
42949672950101101000011100111100110111110
请帮忙!!它在技术上是可行的,它只是先打印数字...
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");
}
}
最佳答案
看来您在 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");
}
关于c - 为什么我不能使用 int 的第一位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417233/