user-0 提问: 新手请问码值的定义

回复:
user: user-1
content: 进来看看。。。。。。

user: user-2
content: 引用 6 楼 u013475621 的回复:谢谢回答 可能我最后一个追加的问题没说清楚 在编写源代码阶段 我们在文本里敲击键盘A键 显示器中显示A 那么下面哪种说明对  A. 这随着敲键盘显示出来的A 这时要编写的程序还没有运行 还没有转换成目标代码 但是仍能显示出字符出来 说明敲键盘显示字符是计算机的基本功能 即使没有程序运行也可以做到  B. 这些随着敲键盘显示出来的所有字符 不是计算机的基本功能 而是编写源代码时使用的程序在运行时的功能 因为这时要编写的程序还没有运行 所以要编写的程序还没有被程序设计语言规定数据类型 不会产生char类型的数据 所以这个时候显示A是编写源代码时使用的程序在运行时产生char类型的数据的结果 你不装操作系统开机试试，看看敲键盘会不会显示字符？ 数据类型是编程语言为了让人能够方便的控制计算机而规定的，在程序运行时没有数据类型这玩意。 你敲键盘会造成键盘电路的变化，如果操作系统能够正确处理这个变化，就会得到操作系统内相应的结果，如果操作系统不能正确处理（没装驱动之类的），那么电路再怎么变化也没用。 这个时候显示A？首先操作系统处理键盘电路信号，得到一个输入，然后将这个输入经过操作系统内部机制（windows是消息机制）转换为一组数据交给在它上面运行的某个程序，这个程序再处理这组数据并执行对应的功能。 再说一次，计算机运行时根本不知道内存中的数据类型是char还是int，因为CPU只认识电位状态！数据类型是用来让人方便理解使用编程语言的，如果你在编程语言内写下int a=0，编译器编译程序时会把这条语句编译为向栈内压入4字节并把这4字节全部设为0，至于之后CPU是使用1个字节2个字节还是8个字节，那都跟你写代码时的数据类型没有任何关系！

user: user-0
content: 引用 4 楼 baichi4141 的回复:[quote=引用 3 楼 u013475621 的回复:] 谢谢回答 是不是这样 而是内存的一块区域中 每个最小区域储存的0和1的情况 代码11111111是8个位中储存的数排列在一起 而不是一个有8个数位的二进制的数字 本身没有值 每个1之间没有换算关系   那么数据以二进制储存 以十进制传输又是怎么回事呢 既然代码不是一个数字 那它也有进位制？还是说仅表达每个位储存的都只有0或1 而没有表达代码的前个数位 等于后个数位的2倍的意思？   8位的数据对象表示值65的内存状态 与ASCII规定的字符A的代码的内存状态一样 但它们不是一回事 那么我想问一下 这个不一样 是不是他们在内存中的区域不一样造成的？前者所在的内存区域 只是和后者一样可以有几个位是1 几个位是0 但只要被数据类型指定在内存的这片区域中储存 就永远没有字符A的意思？   还有个问题哈 我们在编写源代码时 在机器内的代码 是不是都是char类型的 把我们打出来的字符- 1 6变成int类型的-16 把打出来的字符" - 1 6 "变成char类型的字符串-16的是不是编译器的功能？ 在硬件实现上，由于历史原因，每8个存储bit构成了一个基本的存储单元byte，CPU运算、总线传输和存储芯片都是以byte作为操作单位。为了便于理解，人类使用一个byte按照每个bit为2的n次方相加之和来称呼这个byte的内容，如果一个byte的bit全是1，那你可以说它的值是十六进制FF或者十进制255——但本质上，这8个bit可以表示任何信息，彼此之间也完全不必有任何关系只是放在一起而已（虽然大多数情况下都是有关系的），每个bit用来干什么由设置这些bit状态和读取这些bit状态的人/程序决定。 数据以二进制存储指的是硬件原理，由于每个基本电路单元只能表示两个状态，所以建立在硬件上的软件就用一个bit对应一个基本电路单元，建立起了现在的计算机系统。如果有更好的能表示三个状态的基本电路单元（不太可能），那建立在该种硬件上的计算机系统就是数据以3进制存储了。至于以十进制传输，没听过这种说法，你去问说这话的人怎么想的吧。 用一个byte表示一个字符，就是首先规定“这8个bit一起用，按照2进制计算数值表示0~255这256个数之一”，然后再规定“其中有一些数和一些字符存在一一对应关系，例如A这个字符和65这个数一一对应”。然后如果有人想在计算机内表示A这个字符，就设置一个byte内的8个bit为65的2进制状态。数据本身没有类型，是纯粹的bit信息，只有使用这些bit的人规定了每个bit代表什么意思，这些信息对这个人来说才有类型。 机器命令在实现上也是以byte为单位，一般第一个byte是命令类型各bit表示不同意思，后几个byte表示该命令所需的参数。将第一个byte的2进制数值和一些特定的名字对应起来，就是汇编语言了，例如CPU读取到2进制数值为90的byte时，这个机器周期就什么也不执行，然后规定90和NOP这个名字对应起来，汇编语言中就有了一条名为NOP的指令，该指令对应的功能是什么也不做。  数据没有类型，数据类型由设置该数据和使用该数据的人/程序彼此约定。 32位机器上int和float同样是4个byte，没有任何方法区分这两种数据类型的内存，你读取到的4个byte表示多大的数，取决于你认为这4个byte是int类型还是float类型[/quote]  谢谢回答 可能我最后一个追加的问题没说清楚 在编写源代码阶段 我们在文本里敲击键盘A键 显示器中显示A 那么下面哪种说明对  A. 这随着敲键盘显示出来的A 这时要编写的程序还没有运行 还没有转换成目标代码 但是仍能显示出字符出来 说明敲键盘显示字符是计算机的基本功能 即使没有程序运行也可以做到  B. 这些随着敲键盘显示出来的所有字符 不是计算机的基本功能 而是编写源代码时使用的程序在运行时的功能 因为这时要编写的程序还没有运行 所以要编写的程序还没有被程序设计语言规定数据类型 不会产生char类型的数据 所以这个时候显示A是编写源代码时使用的程序在运行时产生char类型的数据的结果

user: user-3
content: http://bbs.csdn.net/topics/390676437

user: user-2
content: 引用 3 楼 u013475621 的回复:谢谢回答 是不是这样 而是内存的一块区域中 每个最小区域储存的0和1的情况 代码11111111是8个位中储存的数排列在一起 而不是一个有8个数位的二进制的数字 本身没有值 每个1之间没有换算关系   那么数据以二进制储存 以十进制传输又是怎么回事呢 既然代码不是一个数字 那它也有进位制？还是说仅表达每个位储存的都只有0或1 而没有表达代码的前个数位 等于后个数位的2倍的意思？   8位的数据对象表示值65的内存状态 与ASCII规定的字符A的代码的内存状态一样 但它们不是一回事 那么我想问一下 这个不一样 是不是他们在内存中的区域不一样造成的？前者所在的内存区域 只是和后者一样可以有几个位是1 几个位是0 但只要被数据类型指定在内存的这片区域中储存 就永远没有字符A的意思？   还有个问题哈 我们在编写源代码时 在机器内的代码 是不是都是char类型的 把我们打出来的字符- 1 6变成int类型的-16 把打出来的字符" - 1 6 "变成char类型的字符串-16的是不是编译器的功能？ 在硬件实现上，由于历史原因，每8个存储bit构成了一个基本的存储单元byte，CPU运算、总线传输和存储芯片都是以byte作为操作单位。为了便于理解，人类使用一个byte按照每个bit为2的n次方相加之和来称呼这个byte的内容，如果一个byte的bit全是1，那你可以说它的值是十六进制FF或者十进制255——但本质上，这8个bit可以表示任何信息，彼此之间也完全不必有任何关系只是放在一起而已（虽然大多数情况下都是有关系的），每个bit用来干什么由设置这些bit状态和读取这些bit状态的人/程序决定。 数据以二进制存储指的是硬件原理，由于每个基本电路单元只能表示两个状态，所以建立在硬件上的软件就用一个bit对应一个基本电路单元，建立起了现在的计算机系统。如果有更好的能表示三个状态的基本电路单元（不太可能），那建立在该种硬件上的计算机系统就是数据以3进制存储了。至于以十进制传输，没听过这种说法，你去问说这话的人怎么想的吧。 用一个byte表示一个字符，就是首先规定“这8个bit一起用，按照2进制计算数值表示0~255这256个数之一”，然后再规定“其中有一些数和一些字符存在一一对应关系，例如A这个字符和65这个数一一对应”。然后如果有人想在计算机内表示A这个字符，就设置一个byte内的8个bit为65的2进制状态。数据本身没有类型，是纯粹的bit信息，只有使用这些bit的人规定了每个bit代表什么意思，这些信息对这个人来说才有类型。 机器命令在实现上也是以byte为单位，一般第一个byte是命令类型各bit表示不同意思，后几个byte表示该命令所需的参数。将第一个byte的2进制数值和一些特定的名字对应起来，就是汇编语言了，例如CPU读取到2进制数值为90的byte时，这个机器周期就什么也不执行，然后规定90和NOP这个名字对应起来，汇编语言中就有了一条名为NOP的指令，该指令对应的功能是什么也不做。  数据没有类型，数据类型由设置该数据和使用该数据的人/程序彼此约定。 32位机器上int和float同样是4个byte，没有任何方法区分这两种数据类型的内存，你读取到的4个byte表示多大的数，取决于你认为这4个byte是int类型还是float类型

user: user-0
content: 引用 2 楼 baichi4141 的回复:不存在码制这玩意，初学者最忌讳的就是自创概念，往往发明一些别人连看都看不懂的术语 一种数据格式要表示一个数，就按照这种格式设置内存Bit是1是0，所以不同的数据格式表示不同的数可能有相同的内存状态，你不能拿一个内存状态说这是什么数据格式是什么数 ASCII码是“单字节对应单英文字符”的数据格式，按照ASCII码这种格式用一个字节表示字符'A'和按照二进制数据格式用一个字节表示整数65，内存中的这个字节是相同的，但那不代表这二者之间就一样，而是因为语言承认这两种数据格式之间的自动转换，二者才能够被视为等价  A 没有码制这玩意 B 字符和整数可以直接按内存状态一一映射，这是语言默认规定，别想到处推广无限适用 C 同B    谢谢回答 是不是这样 而是内存的一块区域中 每个最小区域储存的0和1的情况 代码11111111是8个位中储存的数排列在一起 而不是一个有8个数位的二进制的数字 本身没有值 每个1之间没有换算关系   那么数据以二进制储存 以十进制传输又是怎么回事呢 既然代码不是一个数字 那它也有进位制？还是说仅表达每个位储存的都只有0或1 而没有表达代码的前个数位 等于后个数位的2倍的意思？   8位的数据对象表示值65的内存状态 与ASCII规定的字符A的代码的内存状态一样 但它们不是一回事 那么我想问一下 这个不一样 是不是他们在内存中的区域不一样造成的？前者所在的内存区域 只是和后者一样可以有几个位是1 几个位是0 但只要被数据类型指定在内存的这片区域中储存 就永远没有字符A的意思？   还有个问题哈 我们在编写源代码时 在机器内的代码 是不是都是char类型的 把我们打出来的字符- 1 6变成int类型的-16 把打出来的字符" - 1 6 "变成char类型的字符串-16的是不是编译器的功能？

user: user-2
content: 不存在码制这玩意，初学者最忌讳的就是自创概念，往往发明一些别人连看都看不懂的术语 一种数据格式要表示一个数，就按照这种格式设置内存Bit是1是0，所以不同的数据格式表示不同的数可能有相同的内存状态，你不能拿一个内存状态说这是什么数据格式是什么数 ASCII码是“单字节对应单英文字符”的数据格式，按照ASCII码这种格式用一个字节表示字符'A'和按照二进制数据格式用一个字节表示整数65，内存中的这个字节是相同的，但那不代表这二者之间就一样，而是因为语言承认这两种数据格式之间的自动转换，二者才能够被视为等价  A 没有码制这玩意 B 字符和整数可以直接按内存状态一一映射，这是语言默认规定，别想到处推广无限适用 C 同B

user: user-4
content: 浮点不是很清楚。 所以回答后两个。    B. 字符型和布尔型的这种数据类型 似乎与整数（或者整数的代码 或者整数对应的数据对象）有什么关系 我有点弄不清楚书的中意思 我猜是不是字符型跟所有整数型(signed int signed long int等)的代码一样 代码00000001表示整数1 而不是像浮点数那样前8位是尾数后面是指数这样制作代码的意思?   reply: char型的值 占1字节， 对应 ASC码值  如 char a = '1'; 转换成整数 对应ASC码的 1  bool 型， true and false, 转换成整数 1 和 0     C. 字符型和布尔型的代码 有没有整数值的含义在里边？ 这个值是不是就是代码相同的整数型的值？  reply: 编译器会做隐式转换。 具体值得对应参考前述。