2008/5/15 Vincent Silent <vincent.silent@xxxxxxxxx>: > 你说下逻辑移位和算术移位的区别吧, C 语言里的 >> << 运算是哪种,那就是哪种,难道换个编译器就变了? > JAVA里是有 << >> <<< >>> 四个运算符的,区分的很详细。 > > 2008/5/15 Thomas X. Iverson <txi@xxxxxxxxxxxxx>: >> >> 2008/5/15 Vincent Silent <vincent.silent@xxxxxxxxx>: >> > C 语言并不区分算术移位、逻辑移位。 >> > >> > >> > >> > 2008/5/15 Thomas X. Iverson <txi@xxxxxxxxxxxxx>: >> >> >> >> 是否针对负数值进行逻辑移位取决于什么? >> >> >> >> int x=-8; >> >> x>>=2; /* x==-2 */ >> >> >> >> 什么情况下x会作算术移位,得到一个很大的一个正值?与编译器有关还是什么? >> >> >> >> >> >> -- >> >> Keep It Simple Stupid >> >> >> >> http://blog.ghostunix.org >> >> >> >> ghosTM55 >> > >> > >> >> 这是我在K&R上看到的,但是我现在看到的这本书没有写到这两个概念,只是复习到位运算的时候想起来的 >> 包括我最早看的谭好强的书也提到了逻辑运算和算术运算,你说没有是什么意思呢 >> >> -- >> Keep It Simple Stupid >> >> http://blog.ghostunix.org >> >> ghosTM55 > > 区别?就是说,当一个负数向右移位时,是自动补充符号位还是只是普通的移位 -8在一般情况下(逻辑移位)右移2位得到:10001000 => 10000010 而在算术移位下得到:00100010,也就得到了一个很大的正数值 -- Keep It Simple Stupid http://blog.ghostunix.org ghosTM55