从 SE 7 开始,Java 允许将值指定为二进制文字。文档告诉我“字节”是一种可以容纳 8 位信息的类型,值 -128 到 127。
现在我不知道为什么但我不能定义 8 位而只能定义 7 位如果我尝试将二进制文字分配给 Java 中的字节如下:
byte b = 0b000_0000; //solves to the value 0
byte b1 = 0b000_0001; //solves to the value 1
byte b3 = 0b000_0010; //solves to the value 2
byte b4 = 0b000_0011; //solves to the value 3
依此类推,直到我们找到使用这 7 位的最后几种可能性:
byte b5 = 0b011_1111; //solves to the value 63
byte b6 = 0b111_1111; //solves to the value 127
如果我想让它成为负数,我必须像这样在前面添加一个前导 - :
byte b7 = -0b111_1111; //solves to the value -127
现在我遇到的一半问题是我只使用 7 位来描述他们告诉我的是 8 位数据类型。下半部分是它们似乎不作为二进制补码进行线程化,除非使用 32 位 int 类型,我可以在其中定义所有 32 位(包括“符号指示位”)。
现在当我搜索如何显示范围内的数字 -128 时,我被告知要这样做而没有任何进一步的解释:
byte b8 = 0b1111_1111_1111_1111_1111_1111_1000_0000;
我可以清楚地看到最后的 8 位 (1000 0000) 确实代表 -128 在使用 8 位的二进制强制中,但我仍然没有更加困惑并尝试提出我的问题:
或者一般来说:为什么我必须这样分配它?
关于此的任何链接/信息都很棒! 感谢您花时间阅读本文并提前了解更多信息。
问候 简
最佳答案
根据 Java 规范,
http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1
所有 您的声明(b、b1、...和b8)都使用int 文字,即使它们适合一个字节。 Java 中没有字节字面量,只能使用 int 来初始化一个字节。
我做了一些测试,byte neg128 = -0b1000_0000; 工作正常。 0b1000_0000是128,所以你只需要在它前面放一个-符号。请注意,1 根本不是符号位(不要考虑 8 位字节,考虑转换为字节的 32 位整数)。因此,如果您想指定符号位,您需要写入所有 32 位,正如您所演示的那样。
所以 byte b8 = 0b1000_0000; 是一个错误,就像 byte b8 = 128; 是一个错误(+128 不适合一个字节)。您还可以使用强制转换强制转换:
byte b = (byte) 0b1000_0000;
要么
byte b = (byte) 128;
强制转换告诉编译器您知道 128 不适合一个字节并且位模式将被重新解释为 -128。
关于Java 二进制文字 - 字节值为 -128,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775169/
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
我正在使用Ruby,我正在与一个网络端点通信,该端点在发送消息本身之前需要格式化“header”。header中的第一个字段必须是消息长度,它被定义为网络字节顺序中的2二进制字节消息长度。比如我的消息长度是1024。如何将1024表示为二进制双字节? 最佳答案 Ruby(以及Perl和Python等)中字节整理的标准工具是pack和unpack。ruby的packisinArray.您的长度应该是两个字节长,并且按网络字节顺序排列,这听起来像是n格式说明符的工作:n|Integer|16-bitunsigned,network(bi
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候