char* convert_2(int dec)
{
char* the_String = (char*) malloc(sizeof (int) * Bits_in_Byte + 1);//sizeof(int)=4,the_String=4*8+1=33
int i = 0;
int bitMask = 1;
int tempbitMask = 0;
for(i = sizeof (int) * Bits_in_Byte -1; i>= 0; i--) {//i=31
tempbitMask = bitMask<<i;_**//tempbitMask = bitMask*2^i**_
if(tempbitMask & dec)//这个循环没看懂
the_String[31-i] = '1';
else {
the_String[31-i] = '0';
}
}
the_String[32] = 0;
return the_String;
}
char* convert_2(int dec)
{
//这里就是申请一个大小为33的动态字符数组
char* the_String = (char*) malloc(sizeof (int) * Bits_in_Byte + 1);//sizeof(int)=4,the_String=4*8+1=33
int i = 0;
int bitMask = 1;
int tempbitMask = 0;
//这里就是这个函数的主体算法,循环次数为32次,因为条件为大于等0,所以0的那一次也会运行,其实就是每次循环取一个位
for(i = sizeof (int) * Bits_in_Byte -1; i>= 0; i--) {//i=31
//你这个转换的公式是没问题的,但是这里主要不是看它的十进制值,而是二进制值,
//你代入一下会发现第一次的值为 1000 0000 0000 0000 0000 0000 0000 0000(最右为0位,最左为31位)
//第二次的值为 0100 0000 0000 0000 0000 0000 0000 0000
//第三次的值为 0010 0000 0000 0000 0000 0000 0000 0000
//这个值其实是为了能够与一个值相与以取这个值某个位,具体是哪一个位就看tempbitMask里面1的位置
//以第一次为例,就是取31位的值,第二次就是30位,一直到0位
tempbitMask = bitMask << i;//tempbitMask = bitMask*2^i
//emmm,这是if判断,然后tempbitMask & dec这个运算就是取dec第i位的数据,
//因为是二进制,值只有0/1所以就用if判断写'0'、'1'两种字符了
//想要理解这种以位相与取位的原理,最好还是取几次循环的的情况代入值自己用计算器算一下,很容易就能明白
if(tempbitMask & dec)//这个循环没看懂
the_String[31 - i] = '1';//进入此分支代表dec的第i位为1所以就写入'1'
else {
the_String[31 - i] = '0';//同上
}
}
//这里就是为什么32个位却申请了33个字符的原因,字符串需要一个字符在字符串的最后存放字符串结束符(即'\0',0也可以)
the_String[32] = 0;
return the_String;
}