c语言 输入小写字符man,字符大小写转换

ascii码表中大小写字母如下:

大写字母

10进制

二进制

小写字母

10进制

二进制

A

65

0100 0001

a

97

0110 0001

B

66

0100 0010

b

98

0110 0010

C

67

0100 0011

c

99

0110 0011

D

68

0100 0100

d

100

0110 0100

E

69

0100 0101

e

101

0110 0101

F

70

0100 0110

f

102

0110 0110

G

71

0100 0111

g

103

0110 0111

Z

90

0101 1010

z

122

0111 1010

结合上表,我们拿出任意一个字符, 假如是b;

那么 :

B(0100 0010)

b(0110 0010)

它们之间只有第六个二进制位的不同,在这里假设有

char ch1 = 'b'; char ch2 = 'B';

那么 ch1的二进制码就是 0110 0010,同理 ch2为0100 0010 那么对于语句

ch1 = ch1 & 0xDF ; // 0xDF = 二进制(1101 1111),其中0x在c语言中是16进制的标志,代表这个数是

ch2 = ch2 & 0xDF ; // 16进制数据,& 是按位与操作,就是将两个数的二进制码的每一位都进行 与 操作

那么 ch1、ch2 执行那条语句后的结果就是

(0110 0010) (0100 0010)

& (1101 1111) & (1101 1111)

--------------- --------------

(0100 0010) (0100 0010)

也就是 ch1 = (0100 0010),ch2 = (0100 0010),我们发现ch1、ch2代表的就是大写字符B的二进制码了。

也就是对任意字符ch执行

ch = ch & 0xDF;

那么ch就变成了ch字符对应的大写字符,类似,对任意字符ch执行

ch = ch | 0x20; // 0010 0000

那么ch就变成了对应字符的小写字符。具体分析过程,留给读者。

提示:对任意二进制码 0101 1001,假如我们要在第二位二进制位上存上一个1, 那么我们让其按位或上

0000 0010就行了,也就是 (0101 1001) | (0000 0010) = (0101 1001);因为 0 | 1(或者0) = 1(或0),而 1 | 1(或者0) = 1;

也就是按位或上0,原来的二进制位是没有变化的,但是按位或上1结果永远是1。

假如想把第4位的1变成0,那么(0101 1001) & (1111 0111) = (0101 0001);因为 1 & 1(或者0) = 1(或者0),

0 &1(或者0) = 0; 也就是按位与上1,原来的二进制位是没有变化的,但是按位与上0结果永远是0,这就是

计算机网络中利用网络掩码获取网络号的原理。

一个c语言小例子

#include

int main()

{

char ch;

printf("请输入一个字符:");

scanf("%c",&ch);

printf("%c对应的大写字符是:",ch);

ch = ch & 0xDF;

printf("%c,小写字符是:",ch);

ch = ch | 0x20;

printf("%cn",ch);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值