爱你没错 发表于 2015-12-22 10:12:20

关于C语言用按位或转换大小写的问题?

本帖最后由 爱你没错 于 2016-1-3 10:43 编辑

用C语言自己写了个小写转大写的程序:
int mylowers(char c)
{
        char d=0;
        d = c | 32;
        return d;
}
调用后缺没法转成大写
反汇编代码如下:
27:   {
004010F0   push      ebp
004010F1   mov         ebp,esp
004010F3   sub         esp,44h
004010F6   push      ebx
004010F7   push      esi
004010F8   push      edi
004010F9   lea         edi,
004010FC   mov         ecx,11h
00401101   mov         eax,0CCCCCCCCh
00401106   rep stos    dword ptr
28:       char d=0;
00401108   mov         byte ptr ,0
29:       d = c | 32;
0040110C   movsx       eax,byte ptr
00401110   or          al,20h
00401112   mov         byte ptr ,al
30:       return d;
00401115   movsx       eax,byte ptr
31:   }
看看好像是对的,为什么却没效果

小学期 发表于 2015-12-22 10:19:20

d是函数里面的局部变量,不能够作为返回值的。

爱你没错 发表于 2015-12-22 11:07:25

小学期 发表于 2015-12-22 10:19
d是函数里面的局部变量,不能够作为返回值的。

{:9_241:}没那个函数会return全局变量的吧!函数的返回值是可以用局部变量的,函数的调用过程说得很清楚:保存主调行数的下一条指令的地址相当于入栈,然后运行被调函数,返回返回值,退出被调函数,然后主调函数出栈

q312102408 发表于 2015-12-25 20:53:03

符号用错了吧   &

爱你没错 发表于 2015-12-25 23:30:28

q312102408 发表于 2015-12-25 20:53
符号用错了吧   &

lower是大写变小写,大写变小写ascii码是要变大所以或上0x20,小写变大写是减小ascii码值是与上0XDF

@小甲鱼@ 发表于 2015-12-26 07:38:24

这么长,不想看,我只想睡觉

人造人 发表于 2015-12-26 18:00:43

#include <stdio.h>

int mylowers (char c);

int main ()
{
        printf ("%c\n", 'i');
        printf ("%c\n", mylowers ('i'));

        return 0;
}

int mylowers(char c)
{
        return c & 0xdf;
}

人造人 发表于 2015-12-26 18:02:25

人造人 发表于 2015-12-26 18:00


#include <stdio.h>

int mylowers (char c);

int main ()
{
        printf ("%c\n", 'i');
        printf ("%c\n", mylowers ('i'));

        return 0;
}

int mylowers(char c)
{
        return c & 0xdf; //本来想为本行加红色,不知为什么不能
}

黑执事 发表于 2015-12-28 21:16:17

  #include <stdio.h>
  int main()
  {
  char ch;

  printf("请输入一个小写字母: ");
  scanf("%c",&ch);

  ch = ch - 32;             //这里是关键,因为在ASCII码表中小写字母和大写字母相差32个字符单位
                                //且小写字母比大写字母大32个字符单位
                                        //所以小写字母减去32就可以得到大写字母了

      printf("大写字母是%c",ch);
  return 0;
  }

爱你没错 发表于 2015-12-30 21:04:01

黑执事 发表于 2015-12-28 21:16
  #include
  int main()
  {


我的初衷是想通过位运算来实现,因为位运算比算术运算快{:9_240:}

人造人 发表于 2016-1-2 12:31:20

爱你没错 发表于 2015-12-30 21:04
我的初衷是想通过位运算来实现,因为位运算比算术运算快

不是用 or 应该用 and ,也就是 &
页: [1]
查看完整版本: 关于C语言用按位或转换大小写的问题?