C 字符到二进制函数不';I don’我没有按预期工作
我制作了一个函数,用于将数字转换为二进制形式:C 字符到二进制函数不';I don’我没有按预期工作,c,binary,C,Binary,我制作了一个函数,用于将数字转换为二进制形式: size_t atobin (char n) { size_t bin= 0, pow; for (size_t c= 1; n>0; c++) { pow= 1; for (size_t i= 1; i<c; i++) //This loop is for getting the power of 10 pow*= 10; bin+= (n
size_t atobin (char n)
{
size_t bin= 0, pow;
for (size_t c= 1; n>0; c++)
{
pow= 1;
for (size_t i= 1; i<c; i++) //This loop is for getting the power of 10
pow*= 10;
bin+= (n%2)*pow;
n/= 2;
}
return bin;
}
size\u t atobin(字符n)
{
尺寸=0,功率;
对于(大小c=1;n>0;c++)
{
功率=1;
对于(size_t i=1;ichar
,默认情况下,C中的字符被认为是有符号的
char
包含8位(大部分)。对于有符号字符,MSB用于符号。因此,只能使用7位
(0111111
)2
=(127
)10
您的函数可以使用的最大值。(当您传递一种变量时,该变量最大可容纳127
)
如果使用无符号字符,则MSB不会用作符号位。所有8位都会使用,为我们提供最大可能值(1111111
)2
=(255
)10
对于有符号数字,最小/最大值为-127
到+127
对于无符号数字,最小/最大值为0
至+255
因此,即使您对传递的参数unsigned char
进行了类型设置,它可以保存的最大值也是+255
更详细一点:
Q)将>127
值分配给char
参数时会发生什么
默认情况下,它是有符号字符。它是8位的。但是它不能保存它。那么会发生什么呢
结果是定义了实现
假设该值为130
。二进制值为1000010
。在大多数情况下,该值返回-126
。因此这将是n
的值。
n>0;
失败。从未输入循环。它返回0
现在,如果我们将其设为unsigned char,那么它可以保存0到255(包括0和255)之间的值。这就是您想要的
注:
Q)当>255个值存储在无符号字符中时会发生什么
该值减少为的模(最大值unsigned char可容纳+1)
,即
256
所以,应用模运算并将结果放入
无符号字符
默认情况下,C中的char
被认为是有符号的
char
包含8位(大部分)。对于有符号字符,MSB用于符号。因此,只能使用7位
(0111111
)2
=(127
)10
您的函数可以使用的最大值。(当您传递一种变量时,该变量最大可容纳127
)
如果使用无符号字符,则MSB不会用作符号位。所有8位都会使用,为我们提供最大可能值(1111111
)2
=(255
)10
对于有符号数字,最小/最大值为-127
到+127
对于无符号数字,最小/最大值为0
至+255
因此,即使您对传递的参数unsigned char
进行了类型设置,它可以保存的最大值也是+255
更详细一点:
Q)将>127
值分配给char
参数时会发生什么
默认情况下,它是有符号字符。它是8位的。但是它不能保存它。那么会发生什么呢
结果是定义了实现
假设该值为130
。二进制值为1000010
。在大多数情况下,该值返回-126
。因此这将是n
的值。
n>0;
失败。从未输入循环。它返回0
现在,如果我们将其设为unsigned char,那么它可以保存0到255(包括0和255)之间的值。这就是您想要的
注:
Q)当>255个值存储在无符号字符中时会发生什么
该值减少为的模(最大值unsigned char可容纳+1)
,即
256
所以,应用模运算并将结果放入
无符号字符
char
已签名,将其设置为unsigned char
True,非常感谢char
已签名,将其设置为unsigned char
True,非常感谢