关于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: }
看看好像是对的,为什么却没效果 d是函数里面的局部变量,不能够作为返回值的。 小学期 发表于 2015-12-22 10:19
d是函数里面的局部变量,不能够作为返回值的。
{:9_241:}没那个函数会return全局变量的吧!函数的返回值是可以用局部变量的,函数的调用过程说得很清楚:保存主调行数的下一条指令的地址相当于入栈,然后运行被调函数,返回返回值,退出被调函数,然后主调函数出栈 符号用错了吧 & q312102408 发表于 2015-12-25 20:53
符号用错了吧 &
lower是大写变小写,大写变小写ascii码是要变大所以或上0x20,小写变大写是减小ascii码值是与上0XDF 这么长,不想看,我只想睡觉 #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: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; //本来想为本行加红色,不知为什么不能
} #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-28 21:16
#include
int main()
{
我的初衷是想通过位运算来实现,因为位运算比算术运算快{:9_240:} 爱你没错 发表于 2015-12-30 21:04
我的初衷是想通过位运算来实现,因为位运算比算术运算快
不是用 or 应该用 and ,也就是 &
页:
[1]