请教一个C的简单问题啊

[复制链接]
2186|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 反而是负数) 溢出了?
uc_stm32f050 发表于 2012-2-29 11:24 | 显示全部楼层
11111111  当做是unsigned char就是10进制255
11111111  当做是signed char就是10进制-1
 楼主| lzh8430 发表于 2012-2-29 11:27 | 显示全部楼层
5# uc_stm32f050

明白了 非常感谢指点
huailove 发表于 2012-3-1 19:03 | 显示全部楼层
~要求操作数至少为int。

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

请问兄弟你有写过单片机程序吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

81

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部