
刚接触C语言 有这样一句话 说是:0xfff1和-0x800f等价 都等于10进制的-15什么意思?
我在网上查了,有人说这个是补码和源码看过后还是不太明白我怎么知道一个16进制数是源码还是补码是不是在C语言编程中输入0x表示16进制代表的都是补码?求高人给予详细的解释谢...
我在网上查了,有人说这个是补码和源码 看过后还是不太明白 我怎么知道一个16进制数是源码还是补码 是不是在C语言编程中 输入0x表示16进制 代表的都是补码? 求高人给予详细的解释 谢谢
展开
6个回答
推荐于2017-10-14
展开全部
整形数据在内存里以二进制存放,负数便以补码的方式存放。
取负数的补码方法:先取绝对值,取反,再加1。
以-15举例(两字节):
-15原码: 1000000000001111 0x800f
15的原码: 0000000000001111 0x000f
取反: 1111111111110000 0xfff0
加1得-15的补码:1111111111110001 0xfff1
有符号整形数据二进制里首字符为1的为负数。0x代表16进制,不一定代表补码。
有符号整形数据十六进制0x8的是补码。
取负数的补码方法:先取绝对值,取反,再加1。
以-15举例(两字节):
-15原码: 1000000000001111 0x800f
15的原码: 0000000000001111 0x000f
取反: 1111111111110000 0xfff0
加1得-15的补码:1111111111110001 0xfff1
有符号整形数据二进制里首字符为1的为负数。0x代表16进制,不一定代表补码。
有符号整形数据十六进制0x8的是补码。
展开全部
输入0x表示十六进制,但不是补码
追问
那这两个数是等价的 怎么回事?都等于-15 我也看过别人给的解释但是看不太明白 能给我详细的解释吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也是,编程寻找2^32+1的约数:
#include "stdio.h"
void main()
{
unsigned long i=0x100000001;
unsigned int j=2;
printf("%u",i);
for(;j<=0x100001;j++)
if ((i%j)==0) {printf("%u",j); break;}
}
结果为:1
#include "stdio.h"
void main()
{
unsigned long i=0x100000001;
unsigned int j=2;
printf("%u",i);
for(;j<=0x100001;j++)
if ((i%j)==0) {printf("%u",j); break;}
}
结果为:1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该多看书,真的,这个都好基础的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没对
0x800f 是signed -32753
unsigned 32783
0x800f 是signed -32753
unsigned 32783
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询