크거나 작은 엔디안


57

L리틀 엔디안 아키텍처에서 Bif 실행 또는 빅 엔디안 아키텍처에서 if 실행 을 출력하는 프로그램 또는 함수를 작성하십시오 . 소문자 출력 l또는 b허용 가능합니다.

입력이 없습니다.

스코어링은 코드 골프이므로 바이트 수가 가장 적은 코드가 이깁니다.

편집 : 아래 의견에 따라 항목을 어느 아키텍처에서나 실행할 수 있어야합니다.

나는 이것이 영향을 미치는 답이 단 하나라고 생각하며, 그 대답은 이것이 사실임을 분명히 나타냅니다.


1
상자의 기억. 무슨 말인지 잘 모르겠습니다
Liam

7
나는 이것이 흥미로운 도전이라고 생각합니다 (그리고 그것은 표준을 벗어납니다). 그러나 그것을 테스트하기는 매우 어려울 것입니다. 특히 대부분의 코드는 플랫폼에 따라 매우 다릅니다.
DJMcMayhem

7
그래도 흥미로울 것이라고 생각합니다. 왜냐하면 희망이 esolangs 및 golfing 언어가 '일반적인'언어보다 어려운 시간이기 때문입니다. 나는 그들이 확인하기가 어렵지 않을 것이라고 생각합니다. 최악의 경우 직접 확인해야합니다
Liam

2
특정 기계 코드를 기반으로 한 답변이 금지되어 있다고 생각합니까? 그렇지 않으면 B0 4C C3, 인 mov al, 'L' / ret또는 unsigned char f(){ return 'L'; }유효한 86의 해답이 될 것입니다.
마가렛 블룸

5
브라보! 범용 프로그래밍 언어가 경쟁력을 가질 수있는 코드 골프 도전.
PellMell

답변:


42

파이썬, 33 바이트

import sys
exit(sys.byteorder[0])

sys.byteorder다음 중 하나입니다 'little'또는 'big'(그리고 코드를 보지 않고이 문장을 읽을 분들을 위해, [0]첫 번째 문자을 의미한다).


문제는 출력이 있어야합니다 말한다 LB(또는 소문자 변형)이 아니라 전체 단어.
user2428118

43
그렇기 때문에 sys.byteorder[0]첫 번째 문자 인 byteorder.
s3lph

36

C, 26 바이트

a=66<<24|76;f(){puts(&a);}

32 비트 int및 ASCII 문자를 가정 합니다. amd64 (little-endian) 및 mips (big-endian)에서 테스트되었습니다.

GCC, 23 바이트

00000000: 613d 2742 0000 4c27 3b66 2829 7b70 7574  a='B..L';f(){put
00000010: 7328 2661 293b 7d                        s(&a);}

feersum이 제안합니다. 다중 문자 상수의 값은 구현에 따라 다르지만 GCC에서 작동하는 것 같습니다. 동일한 아키텍처에서 테스트되었습니다.


7
짧은이다 를 null 바이트로 교체 할 수 있습니다. a='B\0\0L';\0
feersum

1
@feersum 다중 문자 상수의 엔디안은 구현에 따라 다릅니다. 일반적으로 코드 골프에서는 그다지 걱정하지 않지만이 과제는 구현을 구별하는 것입니다.
Anders Kaseorg

이 코드는 현재 GCC 이외의 다른 코드에서 작동합니까?
feersum

1
@feersum C89 는 둘 다 허용합니다.
Anders Kaseorg

1
AIX 5.2를 실행하는 RS6000에서 xlc (AIX 컴파일러의 VisualAge C ++ Professional / C, 버전 6)를 사용하여 26 바이트 프로그램이 "B"를 성공적으로 인쇄합니다.
Jerry Jeremiah


20

자바 스크립트 ES6, 50 바이트

_=>"BL"[new Int8Array(Int16Array.of(1).buffer)[0]]

TypedArray 객체가 인터프리터의 고유 엔디안을 노출 시키는 것이 좋은 아이디어인지 누가 알았는지 알지만 여기에 있습니다.


5
WebGL 사람들은 GPU로 전달할 때 엔디안을 변환하지 않는 것이 좋은 생각이라고 생각했습니다. 거의 모든 사람들이 바보라고 생각했습니다… :(
gsnedders

11

C, 36 35 바이트

@algmyr 및 @owacoder 덕분에 1 바이트.

main(a){printf(*(char*)&a?"L":"B");}
main(a){putchar(66+10**(char*)&a);}
main(a){putchar("BL"[*(char*)&a]);}

크레딧은 여기에 있습니다 .

빅 엔디안 머신이 없기 때문에 테스트되지 않았습니다.


2
C 스펙은 단일 인수 main함수를 허용합니까 ?
코드 InChaos

@codesinchaos 그렇습니다. 주어진 명령 행 인수의 수입니다. 일반적으로 여기 1에는 입력이 없기 때문에 변수가 시작되는 데 사용됩니다 (프로그램 이름은 항상 첫 번째 인수로 간주 됨)
Liam

2
@Liam : 0 또는 2 이외의 것이 허용되는 경우 C11에 정의 된 구현입니다.

1
또는 main(a){putchar("BL"[*(char*)&a]);}.
owacoder

2
호출 규칙을 어지럽게하면 31로 내려갑니다 main(char a){putchar("BL"[a]);}.
Andrea Biondo

8

매스 매 티카, 22

{B,L}[[$ByteOrdering]]

이것은 아마도 내장 함수를 사용하지 않는 것에 대한 규칙을 어기는 것입니다.하지만 루브 골드 버그 대안에 관심이 없습니다.


1
내장은 괜찮습니다 (대부분의 답변도 사용하고 있습니다)
Liam

2
그리고 다시 한 번 Mathematica는 내장되어 있습니다!
gcampbell

3
나는 이것이 프로그램이나 함수가 아닌 스 니펫이라고 생각 &하며 함수로 만들기 위해 추가해야 합니다. (그러나“프로그램”을 구성하는 것에 대해 의견이 다를 수 있습니다.)
Anders Kaseorg

1
@Anders 저는 PCG의 현재 표준에 익숙하지 않지만 IMHO는 통역 언어의 한 가지 장점은 스 니펫 프로그램이라는 것입니다. 이것은 Mathematica의 다른 프로그램만큼 독립형으로 실행될 수 있습니다 .
Mr.Wizard

1
@ Mr.Wizard Mathematica의 "프로그램"은 독립형 스크립트 (명시 적 인쇄가 필요함)를 나타내는 반면이 답변은 REPL을 사용합니다.
LegionMammal978

8

C, 27

1 바이트 더 길지만 여기에 있습니다.

f(){putchar(htons(19522));}

잘 작동했습니다. 설명해 주시겠습니까?
ABcDexter

3
@ABcDexter 19522의 이진 확장은 1001100 01000010(바이트를 분리하는 공간)입니다. 이제 각 바이트를 가져 와서 기본 10으로 다시 변환하고 ASCII 테이블을 확인하면이 바이트 시퀀스가에 해당함을 알 수 LB있습니다. htons그 일을 하고, putchar오직 LSB 인쇄됩니다. 빅 엔디안 시스템에서는 B리틀 엔디안 htons에서 바이트를 뒤집 었으므로 LSB는 L입니다.
Kroltan

교체 19522'LB'컴파일러 경고 -1 바이트.
Stan Strum

8

PowerPC 기계 코드-20 바이트

PowerPC는 바이 엔디안 (시작시 엔디안을 설정할 수 있음)이므로이 코드는 BE 및 LE 시스템 모두에서 실행할 수있는 챌린지 요청을 준수해야합니다. 1반환 하거나 현재 설정된 엔디안에 따라 함수입니다 . 'L''B'

기능으로서 AFAICT는 SVR4 PowerPC ABI (ppc32의 Linux에서 사용), PowerOpen ABI (예 : AIX에서 사용) 및 OS X ABI를 준수합니다. 특히, GPR 0은 휘발성 스크래치 레지스터이며 GPR 3은 "작은"값을 반환하는 데 사용됩니다.

00000000 <get_endian>:
   0:   7c 00 00 a6     mfmsr   r0
   4:   54 03 0f fe     rlwinm  r3,r0,1,31,31
   8:   1c 63 00 0a     mulli   r3,r3,10
   c:   38 63 00 42     addi    r3,r3,66
  10:   4e 80 00 20     blr

이제 다음과 같이 진행됩니다.

  • MSR은 GP 레지스터 0으로 판독되고; MSR은 비트 31에서 엔디안 설정 (0 = 빅 엔디안; 1 = 리틀 엔디안)을 포함하고;
  • rlwinm추출물 단지 비트 : 그것은 gpr0과의 값을 취하고, r은 otates 리터 (즉 이제 위치 0에있는) 1 개 장소에서 송금을 m은 1 (그 31,31 의해 생성 된 마스크를 묻는 2 ); 결과는 GP 레지스터 3에 입력됩니다.
  • (10)에 의해 그 결과를 곱하고 66 (합계 'B') (10 것은 간의 차이 'L''B')
  • 마지막으로 발신자에게 돌아갑니다

노트

  1. 그러나 질문은 인쇄를 요구 하지만 다른 운영 체제에서 수정되지 않은 상태로 어셈블리에서 인쇄하는 방법을 명확하지 않습니다. =)
  2. 관심있는 사람들은 rlwinm 문서를 참조하십시오 . PowerPC에 대해 아는 것 외에는 이런 종류의 지침이 매우 흥미로 웠습니다.

    2018 갱신 : 레이몬드 첸은 파워 PC 아키텍처에 대한 일련의 게시있다, 당신은 찾을 수 있습니다 여기 에 대한 그의 위대한 게시물을 rlwinm친구들.


7

자바 8, 96, 64 52 바이트

()->(""+java.nio.ByteOrder.nativeOrder()).charAt(0);

이 SO 답변을 기반으로 한 골프 . 모든 크레딧은 @LeakyNun 및 @AlanTuning으로갑니다. 자바는 잃어버린 행진을 유지합니다.

96 바이트 :

 char e(){return java.nio.ByteOrder.nativeOrder().equals(java.nio.ByteOrder.BIG_ENDIAN)?'b':'l';}

64 바이트 :

char e(){return(""+java.nio.ByteOrder.nativeOrder()).charAt(0);}

테스트되지 않은 b / c 빅 엔디안 컴퓨터에 액세스 할 수 없습니다.


1
char e(){return(""+java.nio.ByteOrder.nativeOrder()).charAt(0);}
Leaky Nun

char e(){return(""+java.nio.Bits.byteOrder()).charAt(0);}
Leaky Nun

@LeakyNun Java API에서 비트를 볼 수 없으며 실행할 때 "비트가 java.nio에 공개되지 않습니다"
Blue

아, 그럼
Leaky Nun

람다를 사용하면 52 바이트! ()->(""+java.nio.ByteOrder.nativeOrder()).charAt(0);
Shaun Wild

6

펄, 38 36 바이트

say+(pack"L",1 eq pack"V",1)?"L":"B"

시스템의 기본 바이트 순서로 숫자를 패킹하고 리틀 엔디안 바이트 순서로 패킹 된 숫자와 비교하여 작동합니다.


6

(G) 넷째, 24 바이트

here $4200004C , c@ emit

셀이 32 비트라고 가정하고 Forth 인터프리터가 Gforth의 기본 접두사를 지원한다고 가정합니다 . 단순히 0x4200004C의 숫자를 메모리에 저장 한 다음 로우 엔드에 바이트를 표시합니다.


5

C, 34 바이트

이것은 ASCII 문자 인코딩을 가정합니다

main(a){putchar(66+10**(char*)a);}

논쟁없이 부르십시오.

설명:

호출시 a1입니다. *(char*)a의 첫 번째 바이트에 액세스합니다. a리틀 엔디안 플랫폼의 경우 1이되고, 빅 엔디안 플랫폼의 경우 0이됩니다.

빅 엔디안 플랫폼에서이 코드는 66 + 10 * 0 = 66을로 전달 putchar합니다. 66은의 ASCII 코드입니다 B. 리틀 엔디안 플랫폼에서는에 대한 ASCII 코드 인 66 + 10 * 1 = 76을 전달합니다 L.


5

C #, 60 52 바이트

C #은이 점에서 놀랍도록 경쟁력이 있습니다.

char e=>System.BitConverter.IsLittleEndian?'L':'B';

C # 6 구문에 대한 Groo의 기여

60 바이트 :

char e(){return System.BitConverter.IsLittleEndian?'L':'B';}

C # 6 구문을 사용하면 약간 단축 할 수 있습니다. char e=>System.BitConverter.IsLittleEndian?'L':'B';물론 Java 응답뿐만 아니라 실제로 값을 인쇄하지는 않습니다.
Groo

프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 이것은 좋은 첫 번째 대답입니다.
Alex A.

5

줄리아, 24 19 바이트

()->ntoh(5)>>55+'B'

이것은 입력을받지 않고를 반환하는 익명 함수입니다 Char. 호출하려면 변수에 지정하십시오. 정수가 64 비트라고 가정합니다.

ntoh함수는 전달 된 값의 엔디안을 네트워크 바이트 순서 (빅 엔디안)에서 호스트 컴퓨터가 사용하는 엔디안으로 변환합니다. 빅 엔디안 머신에서는 ntoh변환을 수행하지 않기 때문에 아이덴티티 기능입니다. 리틀 엔디안 머신에서는 바이트가 교환 ntoh(5) == 360287970189639680됩니다. 어느 쪽이 더 읽기 쉽다면, 0000010100000000000000000000000000000000000000000000000000000000이진수 로 :

결과를 ntoh(5)55 비트만큼 오른쪽으로 시프트하면 빅 엔디안 머신에서는 0이되고 리틀 엔디안 머신에서는 10이됩니다. 문자 상수 것을 추가 'B', 우리가 얻을 것이다 'B'또는 'L'각각 크고 작은 엔디안 시스템에 대해.

FryAmTheEggman과 Dennis 덕분에 5 바이트를 절약했습니다!


32 비트의 경우 55에서 23으로 변경해야합니다 (16 비트의 5는 7, 실수였습니다). 나는 Dennis가 다음과 같은 것을 의미한다고 생각합니다 ()->ntoh(5)>>55+'B'.
FryAmTheEggman

1
f()='L'-ntoh(10)%16그리고 f()='L'-ntoh(10)&10모든 플랫폼에서 작동합니다.
Dennis


5

공통 리스프, 27 바이트

SBCL 및 ECL에서 테스트되었습니다. 이식 가능한 접근을 위해서는 사소한 기능을 사용해야 합니다 .

(lambda()'L #+big-endian'B)

#+표기는 것입니다 읽기 시간 조건 , 읽고 조건부 표현식이 true로 평가되는 경우에만 다음 양식을. 여기서 조건은 전체 #+big-endian텍스트입니다. 즉, :big-endian키워드가 *FEATURES*목록 (플랫폼 별 정보를 포함하는 목록)에 속하는 경우 테스트가 만족됨을 의미합니다 . 다음 식은 'B테스트 결과에 따라 읽거나 건너 뜁니다. 플랫폼이 빅 엔디안이고 REPL에 위의 양식을 작성하면 다음과 같이 작성됩니다.

CL-USER>(lambda()'L 'B)

(NB. CL-USER>가 프롬프트입니다)

함수의 본문은 암시 적이므로 PROGN마지막 표현식의 평가 만 반환됩니다. 따라서 위 실제로 기호를 반환합니다 B. 그러나 읽기 시간 조건이 false로 평가되면 양식은 다음과 같이 쓴 것처럼 읽습니다.

CL-USER>(lambda()'L)

... 단순히 symbol을 반환합니다 L.


스 니펫은 허용되지 않습니다. 대신 전체 프로그램이나 기능을 작성하십시오.
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 업데이트 됨
coredump

참고 : 스 니펫은 OP에서 명시 적으로 허용 한 경우에만 허용됩니다.
Outgolfer 에릭

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 이것에 대한 참조를 제공해 주시겠습니까? 여기에 다른 REPL 답변 및 / 또는 셸 스 니펫이 있으며이 메타 게시물 은 REPL 답변이 기본적으로 괜찮을 수 있음을 제안합니다. 감사.
coredump

5

ARMv6 이상 : 20 바이트 머신 코드

0xE10F1000 : MRS   r0,CPSR        ; read current status register
0xE3110C02 : TST   r0,#1<<9       ; set Z flag if bit 9 set
0x03A0004C : MOVEQ r0,#'L'        ; return 'L' if Z clear
0x13A00042 : MOVNE r0,#'B'        ; return 'B' if Z set
0xEBxxxxxx : BL    putchar        ; print it (relative branch)

테스트하기에 적합한 기계가 없기 때문에 테스트되지 않았습니다. CPSR의 비트 9는 현재로드 / 저장 엔디안을 제공합니다.


반환 된 결과에 대한 올바른 레지스터 이기 때문에 BX lr대신 함수 ( , is?) 에서 반환을 사용할 수 있습니다. putcharr0
anatolyg

사실, (실제로는 MOV pc, lr)은 이전 편집 중 하나였습니다. 그러나 이것은 문자를 반환하는 것이 아니라 문자 를 인쇄 하는 사양을 충족시킵니다 .
user1908704

참조를 잘못 읽었을 수도 있지만 "thumb 2"명령어 인코딩에서 수행 할 수 있다고 생각합니다. 이것은 첫 번째 명령어가 32 비트로 남아 있음을 의미합니다 (ARM v8 참조 설명서의 F7-2720 페이지의 "T1 인코딩", 0xF3EF_8000이됩니다). 두 번째는 또한 32 비트입니다 (피연산자를 인코딩하는 것은 약간 기괴하지만 "i : imm3"을 0010으로 설정하고 "imm8"을 00000010으로 수행 할 수 있으며 전체 명령은 0xF010_2F02입니다). 세 번째 명령어를 실행하기 전에 다음 두 MOV 명령어의 조건을 제어하기 위해 "ITE EQ"(0xBF0C)를 삽입해야합니다.이 명령은 0x204C 및 ...
Jules

... 0x2042 (전체적으로 2 바이트 절약). 그런 다음 최종 BL 명령어는 알지 못하는 주소의 비트가 알고있는 명령어의 비트 사이에 흩어져 있기 때문에 표현하기가 다소 어렵지만 결과는 32 비트 인코딩이므로 결과는 총 18 바이트 여야합니다 (F3 EF 80 00 F0 10 2F 02 BF 0C 20 4C 20 42 F ??? ?? ??). ARMv7 (?)에서는 작동하지만 아키텍처가 ARMv8 이상으로 변경된다고 생각합니다.
Jules

4

펄 5, 21 + 1 = 22 바이트

로 실행하십시오 perl -E.

say ord pack(S,1)?L:B

amd64 (little-endian) 및 mips (big-endian)에서 테스트되었습니다.


는 IS -E플래그는 바이트 수에 정말 필요한? Perl 5.10을 사용한다고 말할 수 있습니다 ( say이 버전에서 명령을 사용할 수 있으므로 )
Paul Picard

1
@PaulPicard 그러나 use 5.10.0;더 많은 바이트입니다!
Anders Kaseorg

1
@PaulPicard 요점이 잘못되었습니다. Perl 5.10에는 -E스위치 또는에 대한 use설명이 필요 say합니다.
Anders Kaseorg

3
-EPPCG에서 "무료"입니다. 추가 할 필요가 없습니다.
Ven

1
(단 -n하고 -p있습니다되지 않음)

4

R, 28 23 바이트

substr(.Platform$endian,1,1)

.Platform$endianbig빅 엔디안에서 실행되고 리틀에서 실행되면 반환 합니다 little. 여기에 사용 substr, 그것은, 출력의 첫 번째 문자를 반환 그래서 하나 b또는l .

으로 endian로 시작하는 유일한 목적은 e객체에 포함 된이 .Platform우리는 그것을 다음 23 바이트 코드에 대한 부분 일치에 감사를 줄일 수 있습니다 :

substr(.Platform$e,1,1)

3

클로저, 46 44 바이트

#(nth(str(java.nio.ByteOrder/nativeOrder))0)

이것은 Java 내장 기능을 사용하여 시스템의 엔디안을 얻는 기능입니다. 그런 다음 문자열 표현을 가져 "LITTLE_ENDIAN"오거나 "BIG_ENDIAN"문자열 중 하나를 선택하여 반환하십시오.

@ cliffroot 덕분에 2 바이트를 절약했습니다 .


클로저는 무엇입니까, lisp 또는 java입니까?
Leaky Nun

@LeakyNun Java와 작동하는 실용적인 LISP일까요? 말하기 어렵다.
마일

#(nth(str(java.nio.ByteOrder/nativeOrder))0)2 바이트 더 짧음
cliffroot

3

루비, 3130 자

puts [1].pack("s")>"\01"??L:?B

흠, 더 나은 방법이어야합니다. 다른 솔루션이 인쇄를 생략한다고 생각하여 문자를 출력 할 필요가 없으면 5자를 줄입니다. 즉, 아무 것도 인쇄하지 않으려면 "풋"부분을 제거하십시오.


내가 정확히 기억한다면, 루비 1.9 이후 사용할 수 ?L?B대신 puts :L하고puts "B"
Sherlock9

나는 효과가 있다고 생각 puts [76,66].pack("s")[0]한다.
Wayne Conrad

@ Sherlock9, 고마워요, 한 문자 적은. @ WayneConrad, 아마도 당신의 대답을 추가하십시오, 나는 테스트 할 큰 엔디안 머신이 없지만 리틀 엔디안에서는 작동합니다. 그러나 이렇게 변경하면 작동하지 않습니다.puts [76,66].pack("s>")[0] . 그것은 내가 이해하지 못하는 어떤 이유로 빅 엔디안에서 일하지 않을 수 있음을 의미합니다. 그러나 이것은 효과가있는 것 같습니다 (귀하의 솔루션에서 파생 됨) puts [19522].pack("s>")[0]. WDYT? 빅 엔디안에서 평가할 곳을 찾을 수 있을지 궁금합니다.
akostadinov

아아, 나는 또한 테스트 할 빅 엔디안 기계가 부족합니다.
Wayne Conrad

3

Bash (및 기타 유닉스 쉘), 32 (33) 바이트

첫 번째와 두 번째 시도 :

case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L         # non-portable

더 짧은 버전 인 Dennis 덕분에 :

od<<<a|grep -q 5&&echo L||echo B  # non-portable
echo|od|grep -q 5&&echo B||echo L # portable

echo유틸리티는 16 진수 값과 함께 개행을 출력하며 0A다른 출력은 없습니다. 들어 <<<a그 것이다 61 0A.

그만큼 od 유틸리티는 기본적으로 입력을 2 바이트 단어로 해석하고 바이트 수가 홀수이면 0으로 채워지고 8 진수로 변환됩니다. 그 결과 에코 출력이로 해석되어 빅 엔디안 또는 리틀 엔디안으로 0A 00변환됩니다 . 가된다 리틀 엔디안과 빅 엔디안에서. OD의 전체 출력은 또한 우리가 사용할 수 없습니다 의미 주소와 크기 데이터를 포함 , 또는 시험에.00500000001261 0A005141060412012

이 명령은 시스템의 엔디안을 노출하도록 잘 정의되어 있습니다. 에서 표준 :

숫자 값을 해석 할 때 사용되는 바이트 순서는 구현에 따라 정의되지만 해당 유형의 상수가 시스템의 메모리에 저장되는 순서와 일치해야합니다.

호환성 노트

넣어도 확실하지 않습니다 echo|od큰 따옴표없이 큰 따옴표없이 역 따옴표를case 모든 시스템 에서 3 워드 인수 가 지원 . 모든 시스템이 줄 바꿈없이 쉘 스크립트를 지원하는지 확실하지 않습니다. 나는 빅 엔디안 시스템에서 패딩 바이트를 추가하는 od 동작의 100 %가 아니라고 확신합니다. 필요한 경우 echo a휴대용 버전에 사용할 수 있습니다. 모든 스크립트는 bash, ksh 및 zsh에서 작동하며 이식 가능한 스크립트는 대시로 작동합니다.


변경 사항이 필요하지 않습니다. 언어 헤드셋에서 작동하는 쉘 하나만 넣으면됩니다.
Dennis

1
@Dennis 내가 분석의 종류의 일을 좋아 ... 나는 경우가 더 재미가 비록 않는 다른 사람보다는 떠들썩한 파티 또는 zsh을의 짧은 대답을 얻을 뭔가 비표준를 찾을 수 있습니다. 어쩌면 내가 할 수있는 일을 볼 수 있습니다[[
Random832

1
분석에 아무런 문제가 없습니다. 마지막 문단은 쉘 특정 답변이 유효한지 확실하지 않은 것처럼 들렸습니다 ... od<<<a|grep -q 5&&echo L||echo BBash 및 기타에서 작동해야합니다.
Dennis

빅 엔디안 VM에서 테스트하고 예상대로 echo|od인쇄합니다 0000000\n005000\n0000001.
Dennis

@ user17752 엔디안은의 출력에 영향을 미치지 않기 때문입니다 od -a.
Random832

3

PHP, 16 바이트

<?=pack(S,14)^B;

이것은 기존의 두 PHP 답변에 사용되지 않은 두 가지 트릭을 사용합니다.

  1. pack () 또는 unpack ()에 전달 된 값은 0 또는 1이 아닌 아무 것도 될 수 있습니다.
  2. 비트 XOR 연산자 ( ^)는 문자열에서 작동하며 문자열 인덱싱 또는 삼항 연산자가 필요없는 짧은 문자열만큼만 결과가 나타납니다.

2

노드, 42 바이트

n=>require('os').endianness()[0]

프로 : 내장되어 있습니다. 단점 : 속성 이름이 매우 길다


2

PowerShell, 44 바이트

[char](66+10*[BitConverter]::IsLittleEndian)

문자 66은 B이고, 10 자 이상은 76, L입니다. 1숫자로 캐스트 할 때 부울 값 "true"가 됩니다. BitConverter표준 .NET 클래스입니다.


1

라켓, 35 28 바이트

(if(system-big-endian?)'B'L)

'B또는 'L각각. 이것이 충분히 구체적이지 않은 경우 알려주십시오 :)



1

Haskell (GHC 전용 크기 제한 숫자 유형 사용), 75 바이트

import Unsafe.Coerce
import GHC.Int
f="BL"!!fromEnum(unsafeCoerce 1::Int8)

(빅 엔디안 아키텍처에서 테스트되지는 않았지만 작동 해야 합니다!)


1

K, 15 바이트

    ("bl")@*6h$-8!`
    ,"l"

설명;

    From right to left;
    -8!`       /serialises the back tick and returns (0x010000000a000000f500)
    6h$-8!`    /This casts the result to `int which is type 6h(could have used `int$-8!`) - the result is (1 0 0 0 10 0 0 0 245 0i)
    *6h$-8!`   /* means first, we take the first item which is 1. Since it will be either 1 or 0, we can use it to index (@) into the two element list on the left i.e. ("bl")1 returns "l" and ("bl")0 returns b

1

배쉬, 27 바이트

iconv -tucs2<<<䉌|head -c1

( U + 424C )는 3 개의 UTF-8 바이트로 인코딩됩니다.E4 89 8C .

iconvglibc의 함수 를 사용하고 UTF-8 로켈이 사용되는 것으로 가정합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.