main()
{
unsigned x=1;
signed char y=-1;
if(x>y)
printf("x>y");
else
printf("x<=y");
}
输出为:X < = Y不理解输出
但我的问题是,在声明无符号X = 1;没有数据类型,如int或char。那么编译器会假设什么?并在char y = -1;这不是一个错误吗?我也想知道程序是如何工作的。
main()
{
unsigned x=1;
signed char y=-1;
if(x>y)
printf("x>y");
else
printf("x<=y");
}
输出为:X < = Y不理解输出
但我的问题是,在声明无符号X = 1;没有数据类型,如int或char。那么编译器会假设什么?并在char y = -1;这不是一个错误吗?我也想知道程序是如何工作的。
signed char y=-1;
-1通常存储在2's
补码形式,但y
被解释为阳性。所以y
成为一个非常大的值,它总是大于x
。
即使它的存储是签+级形式,它仍然是一个非常大的值,如果治疗为阳性。如果解释为正值,则-1的1的补码补码也大于1。
你怎么知道它**会以2的补码存储?它可以存储为1的补码,也可以以符号+幅度表示形式存储。 – 2013-12-11 14:11:22
这些拼写为“解释”和“正面”。用“e”和**一个**“s”。 – 2013-12-11 14:16:08
什么是符号+大小? – user3087840
这与系统的存储机制有关。
为了简单起见,请检查以下代码,其中o/p以十六进制[直接存储格式]显示。
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int ua = 1;
signed int sa = -1;
if (ua>sa)
printf("ua>sa\n");
else
printf("sa>ua\n");
printf("unsigned = 0x%x\t signed = 0x%x\n", ua, sa);
return 0;
}
输出:
[[email protected] Practice]# ./a.out
sa>ua
unsigned = 0x1 signed = 0xffffffff
[[email protected] Practice]#
希望这有助于。
1.'unsigned int'; 2.不,它不是; 3.它工作得很好。 – 2013-12-11 14:09:29
可能的重复:[“unsigned”关键字](http://stackoverflow.com/a/16568382/1825094)(什么'unsigned'没有一个特定的类型是什么意思?) –
将字符分配给我们遵循的变量,即char y = 'Z'。那么如何将-1存储在y中? – user3087840