c语言 的一个基础问题

比如 unsigned int ux = -2;

printf("%o",ux);
这个unsigned 整型数字 不是没有符号的意思吗?
竟然也可以转成八进制?
unsigned int ux= -2 这个2字节的ux 在电脑上用二进制怎么表示的?

"%o"和"%x"就是用于unsigned类型输出
o 无符号8进制整数
u 无符号10进制整数
x 无符号的16进制数字,并以小写abcdef表示
X 无符号的16进制数字,并以大写ABCDEF表示
另外二进制不在乎有无符号追问

我的意思是 无符号的整型 也可以加负号?

追答

无符号的整型加负号你可以写个输出一下就知道了

如你的unsigned int ux = -2;

不会是输出-2

比如

#include <stdio.h>
int main()
{
 unsigned int ux = -2;
 printf("%u",ux);
 return 0;
}

追问

输出一串数字 4294967294 我想知道 用二进制怎么表示带负号的无符号整型
而且用 unsigned int ux=-2 去做printf("%d",ux/2)的到的数字并不是想要的结果
这里面的机理是怎么样的?

追答

比如-2
就是 4294967294 对应的二进制11111111111111111111111111111110

因为%d是有符号的,计算机会做自动的转换,把unsigned 转换成signed再输出
你那样用 unsigned int ux=-2 去做printf("%d",ux/2)
其实就是4294967294/2的结果。

机理就是:
unsigned int的表示范围不是0到4294967295
你可以把它想象成一个圈
则0两边的数就是1和4294967295
比如-2 超出了实际的范围,那么推出就是4294967294
-1就是4294967295

追问

看来对于电脑做乘除法有很大误解,除法乘法实际上就是右移左移, 听你一说明白了,非常感谢!!

温馨提示:答案为网友推荐,仅供参考
相似回答