Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly mips中的toUpper/toLower_Assembly_Character_Mips - Fatal编程技术网

Assembly mips中的toUpper/toLower

Assembly mips中的toUpper/toLower,assembly,character,mips,Assembly,Character,Mips,我需要写一个程序使用mips,将采取一个字符串,并切换所有的大写字母小写和小写字母大写。我的直觉是用字母数字值来写if语句,但我想知道是否有更好的方法来实现这一点。是的,肯定有更好的方法!对应的大写字母和小写字母字符的ASCII值都相差正好0x20。例如,'A'=0x41和'A'=0x61。基本上,第六位设置为小写字符,清除为大写字符 最简单的实现使用了位攻击技巧-如果可以识别字符是字母,则可以使用以下方法对其进行升级: ch &= ~0x20; 或者用以下方法将其降级: ch |=

我需要写一个程序使用mips,将采取一个字符串,并切换所有的大写字母小写和小写字母大写。我的直觉是用字母数字值来写if语句,但我想知道是否有更好的方法来实现这一点。

是的,肯定有更好的方法!对应的大写字母和小写字母字符的ASCII值都相差正好
0x20
。例如,
'A'=0x41
'A'=0x61
。基本上,第六位设置为小写字符,清除为大写字符

最简单的实现使用了位攻击技巧-如果可以识别字符是字母,则可以使用以下方法对其进行升级:

ch &= ~0x20;
或者用以下方法将其降级:

ch |= 0x20;

记住,除了字母ASCII字符外,这对任何其他字符都不起作用。你可以用
(ch>='a'&&ch='a'&&ch='a'&&ch)来检查一个字符是否与之匹配。问题是,是否有比使用if语句更好的方法来实现这一点。答案是肯定的-确实有比52个if语句更好的方法(每种情况下每个字母一个),这是其中之一!但这仍然需要if语句,例如:
(ch>='A'&&ch='A'&&ch='A'&&ch他们没有提到任何其他内容,所以我假设这就是他们计划做的。尽管如此,添加了一个无分支的替代方案。我认为没有太多依据表明您的“无分支”替代方案更快。