打印

请教一个C的简单问题啊

[复制链接]
1386|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzh8430|  楼主 | 2012-2-29 11:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比如这样子啊 uint8_t t1=0x00,t2=0xff;定义这么两个变量。
if(t1==~t2)这句执行不了if内语句,if(t1==(uint_8)~t2)就可以
~t2在运算过程中值是多少?中间过程的运算~t转换成一个系统默认位数的数(比如32位)了嘛?被提升了?
请指教

相关帖子

沙发
uc_stm32f050| | 2012-2-29 11:12 | 只看该作者
~要求操作数至少为int。

换句话说,uint8_t根本就没有~运算。
uint8_t要参与~运算,必须提升至int,而这个提升自动由编译器帮你完成,叫做整型提升。


~t2
实际上是
~((int)t2)

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
sjnh + 1
板凳
uc_stm32f050| | 2012-2-29 11:18 | 只看该作者
总之一句话:
char,signed char,unsigned char没有运算符,所有char,signed char,unsigned char运算必须先提升至int(或者unsigned int),才能参与运算。

使用特权

评论回复
地板
lzh8430|  楼主 | 2012-2-29 11:19 | 只看该作者
2# uc_stm32f050

原来是这样子 另外我还想请教一下啊
定义这样一个变量unsigned char t=0xFF,它在内存中是怎样存储的》
我定义的是一个正数 但是这八位是11111111(最高位是1 反而是负数) 溢出了?

使用特权

评论回复
5
uc_stm32f050| | 2012-2-29 11:24 | 只看该作者
11111111  当做是unsigned char就是10进制255
11111111  当做是signed char就是10进制-1

使用特权

评论回复
6
lzh8430|  楼主 | 2012-2-29 11:27 | 只看该作者
5# uc_stm32f050

明白了 非常感谢指点

使用特权

评论回复
7
huailove| | 2012-3-1 19:03 | 只看该作者
~要求操作数至少为int。

换句话说,uint8_t根本就没有~运算。
uc_stm32f050 发表于 2012-2-29 11:12

请问兄弟你有写过单片机程序吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

81

帖子

1

粉丝