字符串取反后为0?

发布于 2022-10-15 07:39:24 字数 68 浏览 23 评论 0

char *str="abcd";
测试 !str为0
这个想不明白,一个字符串取反后为0?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

夜光 2022-10-22 07:39:24

因为 str 不是 0
所以 !str 是 0

不如你试试

char* str = 0;
!str;

char* str = (char*)1;
!str;

迷雾森÷林ヴ 2022-10-22 07:39:24

回复 2# bruceteen

    如果对单个字符取反来说,理解简单:
   char x='a';
  !a=0;
但是对一个字符串取反的话,理解确实转不过弯

情仇皆在手 2022-10-22 07:39:24

你认为“char *str”是字符串?我认为它就是一个地址值

char* str = "abcd";
假如 "abcd" 地址为 0x12345678,则 str  就是  0x12345678
则 !str 就是 ! 0x12345678,也就是 0

岁吢 2022-10-22 07:39:24

回复 4# bruceteen

   嗯! 这样理解就比较简单了.

不离久伴 2022-10-22 07:39:24

这里的 !str实际上应该取得的cpu标识寄存器里ZF,NZ等,只是str是一个0还是不是0

相对绾红妆 2022-10-22 07:39:24

回复 6# unistd

        怎么会是CPU中的?

三月梨花 2022-10-22 07:39:24

本帖最后由 unistd 于 2011-05-07 13:29 编辑

废话,你以为CPU怎么判断两个数的大小,都是做减法,把结果方寄存器里,这个时候标识寄存器里的 Zero flag位就指示出该结果是不是0,还有符号位指示指示最高位是0还是1.
学没学过计算机接口、汇编、体系结构阿,我学得那么烂还能记住一点。

枉心 2022-10-22 07:39:24

回复 8# unistd

    你我话题不对!关于汇编知识,我不讨论

爱要勇敢去追 2022-10-22 07:39:24

你不知道C语言号称高级汇编语言吗?
用C就必须从汇编、内存的角度考虑问题。
C语言的很多规定语法,都是和汇编和硬件电路相适应的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文