汉字机内码的每个字节都大于128。这是为了解决与ascii码的冲突问题。gb2312将代码表分为94个区,对应第一字节;每个区94个位,对应第二字节,两个字节的值分别为区号值和位号值加32(20h),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区,10-15区、88-94区是有待进一步标准化的空白区。gb2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。故而gb2312最多能表示6763个汉字国标码并不等于区位码,它是由区位码稍作转换得到,其转换方法为:先将十进制区码和位码转换为十六进制的区码和位码,;这样就得了一个与国标码有一个相对位置差的代码,;再将这个代码的第一个字节和第二个字节分别加上20h,就得到国标码。如:“保”字的国标码为3123h,它是经过下面的转换得到的:1703d->1103h->+20h->3123h。国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与ascii码发生冲突,如“保”?字,国标码为31h和23h,而西文字符“1”和“#”的ascii也为31h和23h,现假如内存中有两个字节为31h和23h,这到底是一个汉字?,还是两个西文字符“1”和“#”于是就出现了二义性,显然,国标码是不可能在计算机内部直接采用的,于是,汉字的机内码采用变形国标码,其变换方法为:将国标码的每个字节都加上128,即将两个字节的最高位由0改1,其余7位不变,如:由上面我们知道,“保”字的国标码为3123h,前字节为00110001b,后字节为00100011b,高位改1为10110001b和10100011b即为b1a3h,因此,汉字的机内码就是b1a3h。
每个字节最高位二进制位的值为:1
对于无符号来说,汉字是两个大于127的值合并出来的,10000000就是128,比127大的,最高二进制位当然是1