比如 unsigned int ux = -2;
printf("%o",ux);
这个unsigned 整型数字 不是没有符号的意思吗?
竟然也可以转成八进制?
unsigned int ux= -2 这个2字节的ux 在电脑上用二进制怎么表示的?
我的意思是 无符号的整型 也可以加负号?
追答无符号的整型加负号你可以写个输出一下就知道了
如你的unsigned int ux = -2;
不会是输出-2
比如
#include <stdio.h>输出一串数字 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
看来对于电脑做乘除法有很大误解,除法乘法实际上就是右移左移, 听你一说明白了,非常感谢!!