Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TypeScriptの型で2進数計算
Search
Riya Amemiya
February 04, 2024
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypeScriptの型で2進数計算
Riya Amemiya
February 04, 2024
More Decks by Riya Amemiya
See All by Riya Amemiya
IsAny はなぜ any だけを見抜けるのか
riyaamemiya
0
57
V8のTorqueを語りたい
riyaamemiya
0
100
知ってた?JavaScriptの"正しさ"を検証するテストが5万以上もあること(Test262)
riyaamemiya
1
290
「え?!それ今ではHTMLだけでできるの!?」驚きの進化を遂げたモダンHTML
riyaamemiya
12
6k
そのJavaScript、V8が泣いてます。V8の気持ちを理解して書くパフォーマンス最適化
riyaamemiya
22
8.7k
「え?!それ今ではCSSだけでできるの!?」驚きの進化を遂げたモダンCSS
riyaamemiya
1
210
不健康エンジニア「健康」を知る
riyaamemiya
1
1.4k
AIと共同執筆してより質の高い記事を書こう
riyaamemiya
1
830
いつか使うかも貯金してたらめちゃめちゃ機能が増えてた話
riyaamemiya
0
960
Other Decks in Technology
See All in Technology
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
7.6k
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.6k
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
350
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
What's new in Go 1.27?
ciarana
0
260
Goでデータパイプラインを作ろう
sansantech
PRO
1
510
Adding Right-to-Left support to your web application with CSS logical properties — Lessons from Redmine
vividtone
0
130
Genie Codeハンズオン基礎編
taka_aki
1
130
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
860
2026-08-05 IBM Z開発最前線!IBM Bob Premium Package for Zって何がすごいの?
yutanonaka
0
330
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
650
Building Applications with DynamoDB
mza
96
7.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
490
The Language of Interfaces
destraynor
162
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Ethics towards AI in product and experience design
skipperchong
2
350
エンジニアに許された特別な時間の終わり
watany
108
250k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Chasing Engaging Ingredients in Design
codingconduct
0
280
So, you think you're a good person
axbom
PRO
2
2.1k
Transcript
TypeScript の型で2 進数計算 西悠太(GMO メディア)
自己紹介 名前: 西悠太 所属: GMO メディア フロントエンドエンジニア X: Riya31377928 https://riya-amemiya-links.oshaburikitchin.com/
なぜ作ったの? とある本でCPUが2進数を計算する仕組み を学んで、あれ?これって型でも実装できる んじゃね?と思って書きました
どんなことができるの?
2進数の計算方法 加算 結果が2なら、1を繰り上げ 減算 1から0を引く場合、左の桁から1を借りる 補数で計算して、オーバーフローは切り捨て
どうやって作る? 2進数の計算方法はわかったけど じゃあどうやれば計算できるの? TypeScriptの型システムに +とか-の演算子はないし.... 論理回路があればできるなら...
どうやって作る? 論理回路を型システムの上に 実装しちゃえばいいんだ! AND OR XOR
None
半加算器を実装する 単純に二数の和のみを求める回路 AND回路とXOR回路が必要 次に作る全加算器の実装に必要
AND回路
XOR回路
半加算器
全加算器を実装する 任意の桁数の2進数の加算、減算ができる 半加算器とOR回路が必要 今回は符号付きで考える
OR回路
材料は揃ったけど... 全加算器には半加算器とOR回路が必要 inferは先頭1文字を取り出す オーバーフローを切り捨てないといけない
N文字取り出す
頭文字を削除
文字列を配列に変換
文字列の長さを取得
文字列を反転
今度こそ材料は揃った! 文字列を反転させる 1. 全加算器に投入 2. 不要な部分を切り捨て 3.
None
完成!
https://zenn.dev/gmomedia/articles/820c58037ef246
None