char *str="abcd";测试 !str为0这个想不明白,一个字符串取反后为0?
因为 str 不是 0所以 !str 是 0
不如你试试
char* str = 0;!str;
和
char* str = (char*)1;!str;
回复 2# bruceteen
如果对单个字符取反来说,理解简单: char x='a'; !a=0;但是对一个字符串取反的话,理解确实转不过弯
你认为“char *str”是字符串?我认为它就是一个地址值
char* str = "abcd";假如 "abcd" 地址为 0x12345678,则 str 就是 0x12345678则 !str 就是 ! 0x12345678,也就是 0
回复 4# bruceteen
嗯! 这样理解就比较简单了.
这里的 !str实际上应该取得的cpu标识寄存器里ZF,NZ等,只是str是一个0还是不是0
回复 6# unistd
怎么会是CPU中的?
本帖最后由 unistd 于 2011-05-07 13:29 编辑
废话,你以为CPU怎么判断两个数的大小,都是做减法,把结果方寄存器里,这个时候标识寄存器里的 Zero flag位就指示出该结果是不是0,还有符号位指示指示最高位是0还是1.学没学过计算机接口、汇编、体系结构阿,我学得那么烂还能记住一点。
回复 8# unistd
你我话题不对!关于汇编知识,我不讨论
你不知道C语言号称高级汇编语言吗?用C就必须从汇编、内存的角度考虑问题。C语言的很多规定语法,都是和汇编和硬件电路相适应的。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(9)
因为 str 不是 0
所以 !str 是 0
不如你试试
char* str = 0;
!str;
和
char* str = (char*)1;
!str;
回复 2# bruceteen
如果对单个字符取反来说,理解简单:
char x='a';
!a=0;
但是对一个字符串取反的话,理解确实转不过弯
你认为“char *str”是字符串?我认为它就是一个地址值
char* str = "abcd";
假如 "abcd" 地址为 0x12345678,则 str 就是 0x12345678
则 !str 就是 ! 0x12345678,也就是 0
回复 4# bruceteen
嗯! 这样理解就比较简单了.![](https://www.wenjiangs.com/wp-content/uploads/chinaunix/202207/icon_smile.gif)
这里的 !str实际上应该取得的cpu标识寄存器里ZF,NZ等,只是str是一个0还是不是0
回复 6# unistd
怎么会是CPU中的?
本帖最后由 unistd 于 2011-05-07 13:29 编辑
废话,你以为CPU怎么判断两个数的大小,都是做减法,把结果方寄存器里,这个时候标识寄存器里的 Zero flag位就指示出该结果是不是0,还有符号位指示指示最高位是0还是1.
学没学过计算机接口、汇编、体系结构阿,我学得那么烂还能记住一点。
回复 8# unistd
你我话题不对!关于汇编知识,我不讨论
你不知道C语言号称高级汇编语言吗?
用C就必须从汇编、内存的角度考虑问题。
C语言的很多规定语法,都是和汇编和硬件电路相适应的。