关于编码

1487阅读 0评论2012-04-30 810
分类:C/C++

回车与换行
  回车'0d'或\r或CR, 换行'0a'或\n或LF
  unix: '\n', mac: '\r', windows: "\r\n"

为什么负数的补码等于其绝对值取反再加一
  下面是8位的二进制与十进制的对照表
    二进制数    十进制数
    10000000    -128
    10000001    -127
    10000010    -126
    ........    ....
    11111101    -3
    11111110    -2
    11111111    -1
    00000000     0
    00000001     1
    00000010     2
    ........    ....
    01111100     124
    01111101     125
    01111110     126
    01111111     127
  通过观察易发现绝对值相同的正负数相加,其结果为1,0000,0000
  设此两数分别为A和B,那么A+B=1,0000,0000=11111111 + 1
  从而A=(11111111+1) - B = (11111111-B) + 1 = B取反所得数+1
  不过要注意对于10000000,即十进制的-128,没有对应的128,所以不能作如上计算

为什么会有乱码
  一般而言,编码的本质是形到数的映射,解码的本质是数到形的映射。乱码的出现,就是解码过程出了问题。我们把正确的解码程序集表示为{<数1,形1>,<数2,形2>,...}。如果你用<数a, 形b>去解码数c,显然是不行的。大部分程序允许显示指定使用的编码,如utf-8,gb2312...。你指定对了,解码就没问题了。当然,有些程序号称是智能的,声称能自动识别所用的编码类型。然而有时它还是会出问题的,这时一般可以采用显示指定来解决问题。

ASCII码
 asciifull.gif  

UCS-2和UCS-4
http://guoxinmiao8.blog.sohu.com/129816401.html

中文编码杂谈
上一篇:C语言的数据类型与转换
下一篇:IEEE_754的32位单精度浮点数