你问题是使用unsigned把负数转正数吧?
用unsigned把负数转正并不改变变量的内存形态,也就是二进制编码不会改变,而逻辑数值上的变化可通过二进制的补码去计算,等价于2^变量位数减去负数绝对值(^表示冥)。
比如一个32位的负数值是-N,那么转化成unsigned的值是2^32 - N。
再比如16位整型,short a = -1; 转成无符号的值为 (unsigned short)a == pow(2, 16) - 1 == 65535;
追问怎么看它是32位还是16位的?比如我出一个数,-100,那它是几位的?
追答看你定义的类型啊,32位程序里int型是32位,你直接用常整数默认就是int型,常数小数默认是double。