vernalwind 发表于 2010-5-18 21:07:37

求教:(C语言) 判断 int型数 正负的算法!

比如 一个数 0xfffe
要在程序中判断它是正数还是负数

kangar0065 发表于 2010-5-18 21:10:19

int i= 0xfffe;
if(i>0)
{
         //正数
}
else
{
          //负数
}

728196 发表于 2010-5-18 21:27:36

最高位是符号位最高位是1 为负数 为0 是正数

vernalwind 发表于 2010-5-18 21:49:29

回复【2楼】728196
-----------------------------------------------------------------------
最高位是符号位最高位是1 为负数 为0 是正数
-----------------------------------------------------------------------
我想要的正是 判断最高位是1还是0的算法

vernalwind 发表于 2010-5-18 22:10:28

感谢一楼
我编程通过了
我是这样编的

if(A<0)
{                     //负数
}
else

{                     //非负数


}

wmm20031015 发表于 2010-5-18 22:18:01

if(i&0x8000)
{
//负数
}
else
{
//正数
}

eduhf_123 发表于 2010-5-18 22:59:10

if( i& (1<< (sizeof(i)*8-1) ) )
{
    //negative
}
else
{
    //positive
}

xlsbz 发表于 2010-5-24 20:36:12

单片机里面有负数么 不清楚!

younge 发表于 2010-5-27 13:38:08

哈哈 我也发表一下

union sint16 {uchar us_char8;int a}xx;
xx.a = ***;//***为有符号整型数据
if((xx.us_char8 & 0x80 ))
{
    // 最高位为1,则为负数
}
else
{
    // 最高位为0.为正数   
}

eduhf_123 发表于 2010-5-27 17:18:23

8楼的回复还没有通过审核?

戒魔 发表于 2014-10-13 09:31:58

kangar0065 发表于 2010-5-18 21:10
int i= 0xfffe;
if(i>0)
{


我也遇到这个问题 ,但是int 与unsigned int 在单片机C语言好像没什么意义?因为你用
int i= 0xfffe;   
if(i<0)

负数

else
{
正数
}
都是执行正数的
有没有高手可以解释一下这个问题 ??

xinfa190 发表于 2014-10-13 10:42:30

我在keil下面试了一下,完全没问题呀

michrome 发表于 2014-10-13 10:51:11

盘点最高位 你右移15位

hithms 发表于 2014-10-13 11:18:33

戒魔 发表于 2014-10-13 09:31
我也遇到这个问题 ,但是int 与unsigned int 在单片机C语言好像没什么意义?因为你用
int i= 0xfffe;   ...

在你的编译器中int是几个字节的?若是四个字节的,int i= 0xfffe是正的;若是两个字节的,是负的。

戒魔 发表于 2014-10-13 13:55:23

hithms 发表于 2014-10-13 11:18
在你的编译器中int是几个字节的?若是四个字节的,int i= 0xfffe是正的;若是两个字节的,是负的。 ...

两个字节的,但是int i= 0xfffe是正的!实验出来的

戒魔 发表于 2014-10-13 13:55:43

戒魔 发表于 2014-10-13 13:55
两个字节的,但是int i= 0xfffe是正的!实验出来的

用KEIL,在开发板上试了

戒魔 发表于 2014-10-13 13:56:55

xinfa190 发表于 2014-10-13 10:42
我在keil下面试了一下,完全没问题呀

int i= 0xfffe;   
if(i<0)

负数

else
{
正数
}
我的都是执行正数的

你实验是负的?

hithms 发表于 2014-10-13 14:06:26

戒魔 发表于 2014-10-13 13:55
两个字节的,但是int i= 0xfffe是正的!实验出来的

我试出来的怎么是负的呢???同样是在keil下。

xinfa190 发表于 2014-10-13 14:11:17

是负的,手机上不方便截图

haoyurenzhu 发表于 2014-10-13 14:12:47

围观。。。

hithms 发表于 2014-10-13 14:18:54

戒魔 发表于 2014-10-13 13:56
int i= 0xfffe;   
if(i

检查一下int i= 0xfffe;这条语句的初始化是不是被优化掉了,导致 i 默认等于0 。跑到else中的语句,你就认为是正的,有可能你这种情况就是等于0.

xinfa190 发表于 2014-10-13 14:20:14

戒魔 发表于 2014-10-13 13:56
int i= 0xfffe;   
if(i

看图片,仿真部分

xinfa190 发表于 2014-10-13 14:22:36

建议,在int前加上signed
同时查看一下编译器,看是不是默认把int设置成了unsigned int

戒魔 发表于 2014-10-13 15:03:25

xinfa190 发表于 2014-10-13 14:22
建议,在int前加上signed
同时查看一下编译器,看是不是默认把int设置成了unsigned int ...

你是对的,我的程序是用串口接收到unsigned inta; 的数据,然后再通过a=(int)a;转换,问题 出现在这里,a=(int)a转换不出来,还是没有符号的int型
然后我再用int t ; t=(int)a;就转换成功了

yklstudent 发表于 2014-10-13 16:21:01

{:shutup:}

dz46316740 发表于 2014-10-13 17:04:17

int的宽度,强制转换,
页: [1]
查看完整版本: 求教:(C语言) 判断 int型数 正负的算法!