楼主: andrew.denver
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] Java 字节的意义

🔗
 楼主| andrew.denver 2020-4-9 05:30:35 | 只看该作者
全局:
cutehuazai 发表于 2020-4-8 16:21
比如byte array啊。一般都跟data encoding有关。serialization或者deserialization

没回答我的问题哦
回复

使用道具 举报

🔗
 楼主| andrew.denver 2020-4-9 05:32:17 | 只看该作者
全局:
spilt-over 发表于 2020-4-8 16:53
你不说我都忘记了。。。
至少在盛行多年的x86指令集上寻址逻辑是以byte为最小单位的,按bit寻址不好用、 ...

x86指令集上寻址逻辑是以byte为最小单位的,-- 寻址逻辑是什么呢?  

按bit寻址不好用 - 为何不好用呢?  

占code segment的空间 - 什么code占什么空间呢?
回复

使用道具 举报

🔗
 楼主| andrew.denver 2020-4-9 05:35:51 | 只看该作者
全局:
rdou 发表于 2020-4-8 23:54
你可以考虑下为什么c要用char,应该是一个道理,不管java还是c,都没有1bit的变量可以用,bit只能进行位操 ...

结构体是代表什么?

我啥一定要用结构体,统一全部用bit可以吗?   此外,char跟byte有啥必然关系吗? 我就用8个bit来表示char就行了,为啥非要用一个byte的概念?  
回复

使用道具 举报

🔗
putout 2020-4-9 05:47:05 | 只看该作者
全局:
andrew.denver 发表于 2020-4-8 16:30
一个ASCII或UTF-8字符是1个byte就是从此而来。- 原来是这样,为何byte不设置成8个bit呢?  为何要4个bit ...

Byte就是8个bit啊。。。。其实具体是多少bit没有太大关系,只是现在绝大多数平台为8 bits。Java定义的byte也是8 bits。这个”字节“单位的使用便利就像一般通用的”一打“一样。一打具体为12个不是那么重要,只要能用小数字便利的描述大数字即可。

内存寻址就是你给主内存某个数据地址,主内存能够返回给你的最小数据单元是在那个地址的byte。如果需要从中抽出某bit,你要自己运算bit shift算出来。

建议你看一下操作系统或computer design的基本课程,或看一下C语言怎样使用内存。这些设计决定是以前底层电脑硬件与系统设计所定的,Java只是相匹配这些以前决定好的东西。
回复

使用道具 举报

🔗
putout 2020-4-9 05:58:06 | 只看该作者
全局:
andrew.denver 发表于 2020-4-8 16:35
结构体是代表什么?

我啥一定要用结构体,统一全部用bit可以吗?   此外,char跟byte有啥必然关系吗? ...

你当然想全部用bit也可以,Java和C中都有bit field这个结构,最小单位是bit。电脑反正不会反对。可是写程序的是人,不是电脑。我们抽象所需要理解的结构一般比bit要大很多。比如
char x = 'a';
我们想要电脑把这个变量x赋值为ASCII字符'a'的数值,不管它背后每个bit每个bit是什么。同理
byte x = 42;
我们想要直接将代表42的二进制存入一字节宽的x变量。你想要是必须一个bit一个bit去设要有多麻烦,还会出错。为什么我们要用byte为结构,因为里面的bit之间有关联性

在java中char和byte都是宽为8 bits的数值,只是char的可取值为0至255,一般用来存储字符。byte的可取值为-128至127,一般存储数值或其它二进制数据。

回复

使用道具 举报

🔗
 楼主| andrew.denver 2020-4-9 06:23:53 | 只看该作者
全局:
putout 发表于 2020-4-9 05:58
你当然想全部用bit也可以,Java和C中都有bit field这个结构,最小单位是bit。电脑反正不会反对。可是写程 ...

在java中char和byte都是宽为8 bits的数值,只是char的可取值为0至255,一般用来存储字符。 -  我看到网上说: "char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符"。 这里你们是表示同一个意思吗?

byte的可取值为-128至127,一般存储数值或其它二进制数据。  -- OK,那么还有其他什么类型也是8bit,但是取值是-255-0的或者其他区间的呢?

哈哈好奇。很高兴跟你讨论啊
回复

使用道具 举报

🔗
putout 2020-4-9 07:05:09 | 只看该作者
全局:
andrew.denver 发表于 2020-4-8 17:23
在java中char和byte都是宽为8 bits的数值,只是char的可取值为0至255,一般用来存储字符。 -  我看到网上 ...

奥不好意思,我打错了,我想的是C但是打成了Java。

你书上写的是对的,Java中char是两个字节。取值区间为0至65535。Java的short也是两个字节,取值为-32768至32767。Byte和其它数值型都是正负值取值区间。


回复

使用道具 举报

🔗
smallmikko 2020-4-9 07:12:26 | 只看该作者
全局:
比如 bytedance啊,都会跳舞了还不厉害?
回复

使用道具 举报

🔗
BestOreo 2020-4-9 07:16:25 | 只看该作者
全局:
你知道计算机是怎么存储的么。。
回复

使用道具 举报

🔗
 楼主| andrew.denver 2020-4-9 08:04:23 | 只看该作者
全局:
smallmikko 发表于 2020-4-9 07:12
比如 bytedance啊,都会跳舞了还不厉害?

什么意思?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表