我有以下代码:
int main()
{
int i;
unsigned int j;
printf("Type a number: ");
scanf("%d", &i);
j = i;
if (________)
{
printf("Negative!\n");
}
return 0;
}
我会在if语句中添加什么来检查无符号变量" j"包含负数?
答案 0 :(得分:2)
你可以这样做:
if((int)j < 0)
{
printf("Negative!\n");
}
答案 1 :(得分:1)
您可以检查变量i
,例如
if ( i < 0 )
{
//...
}
或者你可以写例如
if ( j > INT_MAX )
{
//...
}
因为类型int
的非负值的内部表示与类型unsigned int
的相同值的内部表示一致。至少它适用于整数的2补码表示。
最后你可以查看符号位。
答案 2 :(得分:0)
这是一种方法:
#include<stdio.h>
/* This is in easier to verify example.
* I have used char to represent integers that fits in one byte.
* char is one byte in my system
* In case of an overflow, the numbers are wrapped around.
* You could check with bigger types as you please.
*/
int main(void)
{
unsigned char x;
char y;
printf("Size of char is %zd\n",sizeof(char));
printf("Enter an integer : ");
scanf("%d",&x);
y=x;
printf("Number is %s when converted to signed\n",\
(y>=0?"positive":"negative"));
return 0;
}
使用INT_MIN
或INT_MAX
检查相同内容需要包含limits.h
头文件。指点位操作
大卫出来是另一种选择。
答案 3 :(得分:0)
int i;
unsigned int j;
// store a value in i
j = i;
测试j
是否包含负数:
if (0)
{
printf("Negative!\n");
}
无符号整数永远不会保持负值。
如果i
的值为负数,则在将其分配给j
时,它将转换为某个正值。如果您想知道i
的值是否为负值,则应测试i
,而不是j
。
if (i < 0) {
puts("i is negative");
}
else {
puts("i is not negative");
}
puts("j is not negative");
请注意,将j
的值转换回int
并不可靠。将值超过INT_MAX
的值转换为类型int
会产生实现定义的结果(或引发实现定义的信号)。您很可能会恢复i
的原始值,但为什么要这么做呢?如果您想测试i
的值,请测试i
的值。