c语言 关于有符号、无符号和补码、原码?
发布网友
发布时间:2022-05-07 14:50
我来回答
共3个回答
热心网友
时间:2022-06-30 09:23
在C语言中:只有十进制数有符号,八进制和十六进制没有的,一个数的原码是其二进制数,补码是对原码取反后再加上1,
比如: 5则原码是 101,则反码是010,补码=010+1=011
热心网友
时间:2022-06-30 09:24
ch = -5 = 0xfb (8位)
在调用prtinf之前,ch被符号扩展至32位,值为0xFFFF FFFB。把它作为有符号数,输出-5;作为无符号数输出,则是4,294,967,291(即2^32-5)。
符号扩展的概念自己查一下
热心网友
时间:2022-06-30 09:24
1.
char是1字节,int、unsigned int一般都是4字节。
2.
有符号整数在计算机中一律用补码表示。
3.
进行长度扩展时,是按符号位(0或1)进行扩展。
4.
当需要截断时,只保留原数需要的低字节部分,抛弃高字节部分。
5.
用%u输出时,将待输出的数扩展到(或截断到)4字节,并解释为无符号整数输出。
6.
用%d输出时,将待输出的数扩展到(或截断到)4字节,并解释为有符号整数输出。
所以,-05是负整数,用一字节表示其补码是11111011,扩展到4字节是111111111111111111111111111111011,将这个数按无符号整数(%u)解释输出,自然就是2^32-5,按有符号整数解释输出,自然就是-5(因为它是-5的补码的32位表示,与8位补码表示相比,前面多了由符号位扩展来的24个1)。