石头3494 发表于 2016-11-30 18:57:49

一个字节中为什么不可以存储两个十六位进制数字??

RT,这个是小弟从一本书上看到的,网上查找了下,只找到说一个字节中确实不可以存储两个十六位进制的数字,没有解答的过程的。、

个人觉得很是疑惑---一个十六位应该是4个bit 两个不就是8bit == 一个字节??

致年轻的我们 发表于 2016-11-30 23:24:18

迷茫{:10_254:}

DarkSE 发表于 2016-11-30 23:42:52

本帖最后由 DarkSE 于 2016-11-30 23:43 编辑

是不够吗?虽然说是刚刚好,可是如果算上符号位的话就不够了吧{:10_254:},如果按位域来切的话,算上符号位也是不够的

fc1735 发表于 2016-11-30 23:47:17

我们可以操作的计算机最小单位是一个byte,你要用来表示两个(0~15)的数的话也是可以,假设命名为a
赋初值时,假设一个表示13,一个表示10, 那就要用a=13*16+10;
要对低4位做加减就跟一般运算一样,例3+5=8, 就直接用a+5;,只是超过15就溢出了,会对高4位产生影响,且标志寄存不会显示溢出与否,不能做条件判断。
要对高4位做加减 ,例3+5=8,要用a+5*16; ,同样超过15就溢出了,但标志寄存会记录了,只是无法判断等于只能判断大于小于,
但这两个数要赋值给其他人或要输出时,要用到and操作,因为最小单位是byte,要取低4位就要b= a & 15 (00001111),要取高4位就要b=a & 240 (11110000)
虽说我们可以操作byte的运算,但现在的计算机一次都是运算多于一个byte ,用byte效率反而比较差,还有从以前就很少人在用半字节(nibble)来运算,因为效率不及一个字节(byte)

石头3494 发表于 2016-11-30 23:47:37

DarkSE 发表于 2016-11-30 23:42
是不够吗?虽然说是刚刚好,可是如果算上符号位的话就不够了吧,如果按位域来切的话,算上符号位 ...

请问下你说的符号是指正负号吗? 他原话是这么说的一个字节不能存放两个十六进制的数字   好像这话的意思
是不管他符号有没有的呢

石头3494 发表于 2016-11-30 23:48:15

致年轻的我们 发表于 2016-11-30 23:24
迷茫

??很奇怪 有什么可迷茫的?

致年轻的我们 发表于 2016-11-30 23:51:48

石头3494 发表于 2016-11-30 23:48
??很奇怪 有什么可迷茫的?

语文不太好,不是太理解这句话{:10_254:}

DarkSE 发表于 2016-11-30 23:55:57

石头3494 发表于 2016-11-30 23:47
请问下你说的符号是指正负号吗? 他原话是这么说的一个字节不能存放两个十六进制的数字   好像这话的意 ...

就是正负啊,占一位嘛,如果说是 一个字节不能存放两个unsigned十六位的数字 我就服了{:10_266:},如果不加符号位的话你可以试一下,int a : 4;然后赋值10,cout<<hex<<a<<endl;输出7个f一个a,刚好是八个,加上符号就不是了{:10_285:}

石头3494 发表于 2016-12-1 00:00:48

fc1735 发表于 2016-11-30 23:47
我们可以操作的计算机最小单位是一个byte,你要用来表示两个(0~15)的数的话也是可以,假设命名为a
赋初值 ...

大体了解了 ,有个小问题,那个*16是代表的是什么??

fc1735 发表于 2016-12-1 00:09:40

石头3494 发表于 2016-12-1 00:00
大体了解了 ,有个小问题,那个*16是代表的是什么??

0000 0000
要对高4位赋值,比如0001 ,要先左移4位变00010000,等于乘上16

石头3494 发表于 2016-12-1 00:35:31

fc1735 发表于 2016-12-1 00:09
0000 0000
要对高4位赋值,比如0001 ,要先左移4位变00010000,等于乘上16

谢谢了

石头3494 发表于 2016-12-1 00:38:38

致年轻的我们 发表于 2016-11-30 23:51
语文不太好,不是太理解这句话

。。大兄弟 有啥问题直接说就是

四十二 发表于 2016-12-1 22:28:55

提供一个我的想法:因为计算机是以定义的数据的类型作为长度单位来读取数据的,不同类型有不同长度,而不是以按照字节为单位的方式来处理不同数据的。

四十二 发表于 2016-12-1 22:29:39

好像有点答非所问,不过我觉得这样处理好别扭,也不想往下深入拓展。

xieglt 发表于 2016-12-2 16:04:14

一个字节,最大存储的数是255,也就是FFH。100H它就存不下了。如果你说的十六位进制数是指的0-F,很显然,它能存两个。

石头3494 发表于 2016-12-2 17:17:03

xieglt 发表于 2016-12-2 16:04
一个字节,最大存储的数是255,也就是FFH。100H它就存不下了。如果你说的十六位进制数是指的0-F,很显然, ...

不是,你理解错了原话就是说存不下两个十六位进制数暂时我也没得到个确切答案 不过认为有个老兄说的signed的十六位进制就不行,毕竟符号也占一个位

石头3494 发表于 2016-12-2 17:23:19

四十二 发表于 2016-12-1 22:28
提供一个我的想法:因为计算机是以定义的数据的类型作为长度单位来读取数据的,不同类型有不同长度,而不是 ...

确实计算机是以定义的数据的类型作为长度单位来读取数据的, 不同的类型确实也有不同的长度,比如FLOAT和DOUBLE,但是基本的就是以bit为基础的 往上字节 半字字等等的 我也暂时搞不懂,放一边先了

石头3494 发表于 2016-12-2 17:30:11

四十二 发表于 2016-12-1 22:28
提供一个我的想法:因为计算机是以定义的数据的类型作为长度单位来读取数据的,不同类型有不同长度,而不是 ...

在不同的语言中确实不同的类型有不同的长度,比如C语言中遵守IEEE标准的 FLOAT和DOUBLE类型,不过据我所知计算机的基本存储单位就是以bit为基础的,存储0货值1   往上字节 半字字等等的 我也暂时搞不懂这话的意思,放一边先了,可以参考贴里面的一老兄说的可能是因为signed和unsigned的区别,话说这个在C里面才这么划分,原话说的是所有计算机里面,具体的我也不太清楚呢,放在这里让大家探讨探讨

xieglt 发表于 2016-12-2 18:37:49

符号位是最高位,这是大家约定俗成的。难道一个字节中能出两个符号位?一个最高位是1的数是正还是负在于你是怎么看的,你认为是正就是正,你认为是负就是负。计算机本身可不知道什么正负。对于这句话本身,我认为歧义很大,而且,纠结这种题没有任何意义,不会对你有任何帮助。

石头3494 发表于 2016-12-2 19:05:16

xieglt 发表于 2016-12-2 18:37
符号位是最高位,这是大家约定俗成的。难道一个字节中能出两个符号位?一个最高位是1的数是正还是负在于你是 ...

好吧,这只是我很好奇的一个玩意,我继续找答案就是了
页: [1] 2
查看完整版本: 一个字节中为什么不可以存储两个十六位进制数字??