一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 1962|回复: 7

请教一下C语言中一个运算符的理解

[复制链接]
发表于 2013-1-24 23:44 | 显示全部楼层 |阅读模式
大家好:我是一个C语言的菜鸟,现在遇到一个自己不怎么理解的运算符,如下:
      temp&=0x03---(网上的解释)保留最低的两位,其他位清除。
  我的理解:上面的运算等同于:temp(1)=temp(2)&0x03(0x03=00000011),与运算是位相同就为1,不同就为0。那么
问题1:temp(2)需要赋初值吗?
问题2.最终temp(1)会得到一个值吗?
问题3.我这样理解是否正确,如果不正确的话,怎样用通俗的思维来理解这个运算。

       如果这个问题太过低级,希望大家勿喷。
发表于 2013-1-24 23:51 | 显示全部楼层
temp&=0x03 也就是 temp=temp&0x03
例如temp=0x0f
那么 temp&=0x03 就是把0000 1111 和0000 0011相与后的结果再赋给temp
最后temp=0x03,  

temp&=0x03这条语句就是把temp高六位都清零取低两位

常用的有temp=temp&0x0f  只留低四位
            temp=temp&0xf0  只留高四位
回复

使用道具 举报

发表于 2013-1-25 00:44 | 显示全部楼层
&按位与运算是一个双目运算符(也就是需要两个运算对象)
因此temp&=0x03 就是  temp =  temp & 0x03(0000 0011B) 就是保留最后两位,前面几位全清零
中文解释就是取当前的TEMP值和0x03进行按位与逻辑运算,取这个运算结果更新TEMP
回复

使用道具 举报

发表于 2013-1-25 01:34 | 显示全部楼层
2楼正解将运算符写在前面是自运算的意思
回复

使用道具 举报

发表于 2013-1-25 08:58 | 显示全部楼层
唉~
我的理解:上面的运算等同于:temp(1)=temp(2)&0x03(0x03=00000011),与运算是位相同就为1,不同就为0。那么

一错再错,难怪迷糊。

1、
temp&=0x03
等同temp  &=  0x03
等同temp = temp & 0x03

2、先去搞明白“与运算”到底是做什么再说。真的是“位相同就为1,不同就为0”吗?
回复

使用道具 举报

发表于 2013-1-25 09:34 | 显示全部楼层
我也说两句 楼上说的是位运算,& 位与运算 ,它的特点是 同位都是真的时候结果才真,否则假 ; 即真真得真,真假的假 举个例子:  10001011
                                          &11110001
                          ----------------------------
                                            10000001
回复

使用道具 举报

发表于 2013-1-25 10:01 | 显示全部楼层
位与运算考虑成按位相乘比较容易理解,1*1=1, 1*0=0, 0*0=0 。
回复

使用道具 举报

 楼主| 发表于 2013-1-25 21:12 | 显示全部楼层
谢谢以上的朋友热心解答及提醒,我明白了,谢谢!
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-19 08:48 , Processed in 0.036129 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表