我的目标是让一个十进制数,在二进制中有与用户指定相同数量的前导1,并存储在 unsigned long
类型的变量 mask
中;其余位将设置为零。
int mask;
scanf("%d",&mask);
unsigned long subnetMask = 0;
int counter = 31,a;
for(int a = mask, a > 0; a--) {
subnetMask += pow(2,counter);
counter--;
}
printf("%ld",subnetMask);
现在,当用户输入24时,掩码的二进制字符串为11111111 11111111 11111111 00000000,我正在尝试将其转换为十进制。但是,它给出的输出结果应该是4294967040,而不是-128。我知道某些部分存在内存溢出问题,但我无法找出原因。我已经尝试了几种方法,例如将
subnetMask
的数据类型替换为int
和long
。
printf("%lu",subnetMask);
。 - brucegmask
。 - kaylumpow(2, counter)
,请改用1L << counter
。 - phuclvpow(2,counter)
-->(1ul << counter)
- chux - Reinstate Monica